从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