從WAV文件獲取原始音頻樣本(理想情況下爲浮點數)而不修改文件採樣率的最簡單方法是什麼?從WAV文件中讀取原始音頻樣本
我跟着https://stackoverflow.com/a/4572990/1116197的例子,但我不知道如何從buffer
提取浮動。只是做buffer[n]
不起作用。據basicDescription.mFormatFlags
該文件是kAudioFormatFlagIsSignedInteger
和kAudioFormatFlagIsPacked
我已經成功使用ExtAudioFileRef
,而不是做提取數據(如float
S),但是這需要指定要輸出的格式,但我不希望改變採樣率。例如你可以做
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat;
audioFormat.mBitsPerChannel = sizeof(Float32) * 8;
audioFormat.mChannelsPerFrame = 1; // Mono
audioFormat.mBytesPerFrame = audioFormat.mChannelsPerFrame * sizeof(Float32); // == sizeof(Float32)
audioFormat.mFramesPerPacket = 1;
audioFormat.mBytesPerPacket = audioFormat.mFramesPerPacket * audioFormat.mBytesPerFrame; // = sizeof(Float32)
ExtAudioFileSetProperty(
fileRef,
kExtAudioFileProperty_ClientDataFormat,
sizeof (AudioStreamBasicDescription),
&audioFormat
),
我想我可以獲取該文件AudioStreamBasicDescription
首先使用使用ExtAudioFileGetProperty
,但根據蘋果文檔(http://developer.apple.com/library/ios/#documentation/MusicAudio/Reference/ExtendedAudioFileServicesReference/Reference/reference.html)屬性ID我需要的是kExtAudioFileProperty_FileDataFormat
這是隻讀 - A file’s data format. Value is a read-only AudioStreamBasicDescription struct.
- 所以我不能修改它添加mFormatFlags = kLinearPCMFormatFlagIsFloat
所以我想我可以做到上述,並創建一個新的ASBD和複製一切,但它似乎是非常複雜,所以我想知道如果我吠叫錯了樹完全?有沒有更簡單的方法來做到這一點?
我會用這種方法,謝謝! – Mark