Каков самый простой способ получить необработанные звуковые сэмплы (в идеале, как плавающие) из WAV-файла без изменения частоты дискретизации файла?Чтение исходных звуковых образцов из файлов WAV
Я следовал примеру в https://stackoverflow.com/a/4572990/1116197, но тогда я не уверен, как извлечь поплавки с buffer
. Просто делать buffer[n]
не работает. По basicDescription.mFormatFlags
файл kAudioFormatFlagIsSignedInteger
и kAudioFormatFlagIsPacked
Я сумел сделать извлечь данные (как float
с) с использованием ExtAudioFileRef
вместо этого, но это требует указания выходной формат, который вы хотите, но я не хочу, чтобы изменить частота дискретизации. например вы можете сделать
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
, но в соответствии с Документами 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 и скопировать все, но все это кажется очень сложным, поэтому я задаюсь вопросом, не лаю ли я неправильное дерево полностью? Есть ли более простой способ сделать это ?!
Я пойду с таким подходом, спасибо! – Mark