Tôi đang cố gắng viết (những gì nên được) một ứng dụng đơn giản có một loạt các đơn vị âm thanh theo thứ tự trong một biểu đồ và sau đó viết đầu ra vào một tập tin. Tôi đã thêm một cuộc gọi lại bằng cách sử dụng AUGraphAddRenderNotify. Đây là chức năng gọi lại của tôi:Cách viết đầu ra của AUGraph vào một tệp?
OSStatus MyAURenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *actionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
if (*actionFlags & kAudioUnitRenderAction_PostRender) {
ExtAudioFileRef outputFile = (ExtAudioFileRef)inRefCon;
ExtAudioFileWriteAsync(outputFile, inNumberFrames, ioData);
}
}
Loại tác phẩm này. Các tập tin có thể chơi được và tôi có thể nghe những gì tôi ghi lại nhưng có một số lượng khủng khiếp của tĩnh mà làm cho nó hầu như không nghe được.
Có ai biết điều gì sai với điều này không? Hoặc có ai biết cách tốt hơn để ghi lại đầu ra AUGraph vào một tập tin không?
Cảm ơn sự giúp đỡ.
Làm các định dạng của biểu đồ AUGraph và ExtAudioFile (định dạng dữ liệu khách hàng) của bạn? Ngoài ra, bạn có cần ghi lại trong thời gian thực không? – sbooth
Tôi nghĩ chúng phù hợp. Tôi đã sử dụng cùng một AudioStreamBasicDescription để định cấu hình tất cả các đơn vị âm thanh và tạo tệp. Tôi không chắc chắn làm thế nào để thực sự kiểm tra mặc dù. Bạn có biết làm thế nào để làm điều đó? Tôi đoán tôi sẽ xem xét nó. Tôi đoán tôi không cần phải ghi lại trong thời gian thực nhưng có cách nào khác để làm điều đó không? Nếu tôi không lưu dữ liệu một số nơi trong thời gian thực thì nó bị mất. – HowsItStack
Tôi tin rằng thay vì gọi 'AUGraphStart' bạn muốn gọi' AudioUnitRender' nhiều lần trên đầu biểu đồ. Tôi nghĩ rằng vấn đề khi thực hiện nó trong thời gian thực là bộ đệm vòng trong của ExtAudioFile' sẽ lấp đầy và mất dữ liệu. – sbooth