我正在 iPhone 上进行一个项目,我正在使用 AVAudioRecorder 从设备麦克风录制音频,然后将操纵录音。
为了确保我从文件中正确读取样本,我使用 python 的 wave 模块来查看它是否返回相同的样本。
但是,python 的 wave 模块在尝试打开 AVAudioRecorder 保存的 wav 文件时返回“fmt 块和/或数据块丢失”。
这些是我用来记录文件的设置:
[audioSettings setObject:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[audioSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[audioSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[audioSettings setObject:[NSNumber numberWithFloat:4096] forKey:AVSampleRateKey];
[audioSettings setObject:[NSNumber numberWithInt:1] forKey:AVNumberOfChannelsKey];
[audioSettings setObject:[NSNumber numberWithBool:YES] forKey:AVLinearPCMIsNonInterleaved];
[audioSettings setObject:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
之后,我只是打电话给 recordForDuration 来实际进行录音。
录制成功——我可以播放文件等,我可以使用 AudioFile 服务读取样本,但我无法验证它,因为我无法使用 Python 的 wave 模块打开文件。
这是文件的前 128 个字节的样子:
1215N:~/Downloads$ od -c --read-bytes 128 testFile.wav
0000000 R I F F x H 001 \0 W A V E f m t
0000020 020 \0 \0 \0 001 \0 001 \0 @ 037 \0 \0 200 > \0 \0
0000040 002 \0 020 \0 F L L R 314 017 \0 \0 \0 \0 \0 \0
0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
0000200
知道我需要做什么来确保 AVAudioRecorder 写出正确的 WAV 标头吗?