在不修改文件的采样率的情况下,从 WAV 文件获取原始音频样本(最好是浮点数)的最简单方法是什么?
我已经按照https://stackoverflow.com/a/4572990/1116197上的示例进行操作,但是我不确定如何从buffer
. 只做buffer[n]
是不行的。根据basicDescription.mFormatFlags
文件是kAudioFormatFlagIsSignedInteger
和kAudioFormatFlagIsPacked
我已经设法float
使用而不是提取数据(作为s)ExtAudioFileRef
,但这需要指定您想要的输出格式,但我不想更改sampleRate。例如你可以做
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
先使用 using获取文件ExtAudioFileGetProperty
,但根据 Apple 文档(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 并复制所有内容,但这一切似乎都非常复杂,所以我想知道我是不是完全找错了树?有没有更简单的方法来做到这一点?!