首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将在Windows Media player上播放的iPhone压缩音频格式

将在Windows Media player上播放的iPhone压缩音频格式
EN

Stack Overflow用户
提问于 2009-11-06 23:22:15
回答 2查看 2.1K关注 0票数 0

我必须在将在Windows Media Player上回放的iPhone上录制音频,不使用非标准编解码器;也就是说,不使用尚未随WMP一起提供的编解码器。(公司要求。)音频必须是base-64到服务器,所以我需要得到尽可能小的音频大小。即使在8Kb的记录频率下,AIFF文件也会占用极大的空间。我似乎找不到一个压缩的AIFF格式,WMP将吞下。

EN

回答 2

Stack Overflow用户

发布于 2009-11-07 00:48:28

最好的办法是写WAV文件,用ulaw或alaw压缩(你的AudioStreamBasicDescriptionmFormatId应该是kAudioFormatULawkAudioFormatALaw。测试一下,看看哪一个为您的应用程序提供了最小的文件大小。

下面是设置ExtAudioFile实例以编写ulaw的一些代码:

代码语言:javascript
运行
复制
NSArray * docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * docDir = [docs objectAtIndex:0]; 
NSURL * outFile = [NSURL fileURLWithPath:[docDir stringByAppendingPathComponent:@"OutFile.wav"]];
AudioStreamBasicDescription asbd;
bzero(&asbd, sizeof(asbd));
asbd.mSampleRate = 11025; // or whatever
asbd.mFramesPerPacket = 1;
asbd.mChannelsPerFrame = 1;
asbd.mFormatID = kAudioFormatULaw; //or kAudioFormatALaw
ExtAudioFileRef theFile;
err = ExtAudioFileCreateWithURL((CFURLRef)outFile,
                          kAudioFileWAVEType,
                          &asbd,
                          0,
                          kAudioFileFlags_EraseFile,
                          &theFile);

希望这能有所帮助。

-添加

以下是对SpeakHere示例代码的修改,以获得ulaw压缩:

SpeakHereController.mm:116

代码语言:javascript
运行
复制
recordFilePath = (CFStringRef)[NSTemporaryDirectory() stringByAppendingPathComponent: @"recordedFile.wav"];

SpeakHereController.mm:158

代码语言:javascript
运行
复制
recorder->startRecord(CFSTR("recordedFile.wav"));

AQRecorder.mm:192

代码语言:javascript
运行
复制
SetupAudioFormat(kAudioFormatULaw);

AQRecorder.mm:215

代码语言:javascript
运行
复制
XThrowIfError(AudioFileCreateWithURL(url, kAudioFileWAVEType, &mRecordFormat, kAudioFileFlags_EraseFile,
                                      &mRecordFile), "AudioFileCreateWithURL failed");
票数 2
EN

Stack Overflow用户

发布于 2011-02-12 02:13:49

虽然距离上一篇文章已经有很长时间了,但我发现问题的答案是user196004无法保存到临时文件夹以外的文件夹。

AudioFileCreateWithURL接受CFURLRef作为输入。如果url是使用CFURLCreateWithString创建的,并且目标文件夹中有空格,则url的创建将失败(null)。

解决方案是对字符串进行转义。

CFStringRef fileNameEscaped = CFURLCreateStringByAddingPercentEscapes( NULL,fileName,NULL,NULL,kCFStringEncodingUTF8 );

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1688284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档