[笔记]WAV2MP3之单通道的问题

作者分享了如何在新版libav不支持单通道wav转mp3时,通过lame库实现这一转换。关键在于理解lame_encode_buffer和lame_encode_buffer_interleaved的区别,后者适用于混音,而前者则用于处理单声道。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近发现新版32位的libav不支持单通道wav转mp3,原因不详,于是用lame库做一个转码的。

以前一直用lame_encode_buffer_interleaved将wav数据转为mp3数据,但是仅仅适合双通道的情况,我一直以为mp3不支持单通道(实际上是可以的,2019年32位的ffmpeg就可以做到),直到我看到一篇文章提到lame_encode_buffer_interleaved适合混音的,lame_encode_buffer则是分别处理左右声道,那么单通道吗,不就是将右声道或左声道干掉就完事了吗?一试便成功:

if (_wav_hd.channels == 1)
{
			write = lame_encode_buffer(lame, pcm_buffer, NULL, read, mp3_buffer, MP3_SIZE);
}
else
{
            write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
}

特记录下来,免得以后再犯此低级错误。

需要基础知识:lame库转码的一般常识(自行搜索,网上很多)

ios录音的caf文件转MP3文件,以兼容android 注意音频参数的设置,如果声音异常,请调整参数。 code: AVAudioSession *session = [AVAudioSession sharedInstance]; NSError *sessionError; [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError]; _sampleRate = 11025;//8000;//44100; _quality = AVAudioQualityLow; if(session == nil) NSLog(@"Error creating session: %@", [sessionError description]); else [session setActive:YES error:nil]; NSString *cafFilePath = strCaf; // NSString *mp3FileName = @"Mp3File"; // mp3FileName = [mp3FileName stringByAppendingString:@".mp3"]; NSString *mp3FilePath = strMP3Path;//[[NSHomeDirectory() stringByAppendingFormat:@"/Documents/"] stringByAppendingPathComponent:mp3FileName]; @try { int read, write; FILE *pcm = fopen([cafFilePath cStringUsingEncoding:1], "rb"); //source fseek(pcm, 4*1024, SEEK_CUR); //skip file header FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb"); //output const int PCM_SIZE = 8192; const int MP3_SIZE = 8192; short int pcm_buffer[PCM_SIZE*2]; unsigned char mp3_buffer[MP3_SIZE]; lame_t lame = lame_init(); lame_set_in_samplerate(lame, _sampleRate); lame_set_VBR(lame, vbr_default); lame_init_params(lame); do { read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm); if (read == 0) write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE); else write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE); fwrite(mp3_buffer, write, 1, mp3); } while (read != 0); lame_close(lame); fclose(mp3); fclose(pcm); } @catch (NSException *exception) { NSLog(@"%@",[exception description]); } @finally { }
我是一名移动运营商的工作人员,负责以主动电话外呼的方式开展客户满意度修复工作。现在需要利用python技术写一个关于外呼电话录音包质检分析的系统,需要封装成可执行的.exe程序。请给出详细的方案及切实可执行的详细完整代码(附注解),不要假设可行的伪代码场景,不要简化。以下为分析要求及分析维度: 一、要求: 1、输入框需包含:音频选择框(支持多选或选择文件夹)、关键词选择框(选择本地关键词.xlsx文件地址)。 2、程序界面需包含开始分析、停止分析、清空等按钮命令。 3、输出框需包含已完成分析、分析错误、分析报告储存路径等提示(分析报告生成一个汇总的结构化excel清单,一行代表一个文件包含多个分析维度结果。同时生成一个汇总的可视化图表分析报告)。 4、音频文件可能有多种格式,如MP3WAV、AMR等,需要兼容多种格式。 5、在进行语音识别为文本时采用openai/whisper-small模型离线本地加载使用。 6、语音识别需要进行说话人分离,采用pyannote预训练模型,下载到本地加载使用。客服人员根据关键字开场白来确定,因为是主动外呼,关键字不能确定的情况下默认第二个说话者为客服。 7、要考虑最后封装的程序需要在个人笔记本电脑中运行。 二、分析维度: 1、通话基本信息:音频时长、文件名称。 2、服务规范检查:开场白检查(根据关键字)、结束语检查(根据关键字)、服务禁语检查(根据关键字)。 3、客服服务态度情感分析:结合客服的文本情感分析,分析是否有不耐烦、生气等负面情绪。中文文本情感分析模型请使用Erlangshen-Roberta-110M-Sentiment,下载到本地加载使用 4、客户情感分析:结合客户的文本情感分析客户整体情感极性(积极/消极/中性),特定情绪识别(如愤怒、不耐烦)。中文文本情感分析模型请使用Erlangshen-Roberta-110M-Sentiment。下载到本地加载使用。 5、沟通技巧检查:客服语速与清晰度分析、平均音量水平及稳定性。 6、问题解决率分析:客户问题是否被有效回答。
最新发布
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值