怎么通过程序(如python)判断一个音频文件(如wav、mp3等格式)的声音清晰度?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么通过程序(如python)判断一个音频文件(如wav、mp3等格式)的声音清晰度?相关的知识,希望对你有一定的参考价值。
我用wpf画过wav的频谱图和语谱图,这里有个参考http://www.codeproject.com/Articles/488655/Visualizing-Sound波形图应该更简单吧 计算声音强度就好了 至于mp3我想应该先解码成pcm追问
有没有这类API可以调用,比如可以判断一段声音质量的好坏,是圆润纯净的或是嘈杂混乱的?
参考技术A你好,我是元子宝呗,用百度网盘分享给你,点开就可以保存,链接永久有效^_^链接:
--来自百度网盘超级会员v3的分享
如果有另外想要的资源或者链接失效,可以使用百度网盘推出的【收集文件】功能进行提问收集资源哦,无需转存简单快捷,功能链接:https://pan.baidu.com/disk/main#/transfer/list 微信小程序、百度网盘app、web端都已上线
如何用背景音乐录制音频?
【中文标题】如何用背景音乐录制音频?【英文标题】:How To Record Audio With background Music? 【发布时间】:2011-11-11 12:09:21 【问题描述】:从最近几天开始,我正在开发一个 iphone 应用程序,该应用程序需要记录用户音频并将其与背景音乐一起保存,简单地说,通过附加两个音频文件生成第三个音频文件, 我尝试使用 AudioToolBox api 来做,但没有成功,任何人都可以建议我正确的方向去哪里获得任何建议,???
谢谢,
【问题讨论】:
【参考方案1】:你可以这样做
- (BOOL) combineVoices1
NSError *error = nil;
BOOL ok = NO;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
CMTime nextClipStartTime = kCMTimeZero;
//Create AVMutableComposition Object.This object will hold our multiple AVMutableCompositionTrack.
AVMutableComposition *composition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:0.8];
NSString *soundOne =[[NSBundle mainBundle]pathForResource:@"test1" ofType:@"caf"];
NSURL *url = [NSURL fileURLWithPath:soundOne];
AVAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
NSArray *tracks = [avAsset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack = [[avAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:0.3];
NSString *soundOne1 =[[NSBundle mainBundle]pathForResource:@"test" ofType:@"caf"];
NSURL *url1 = [NSURL fileURLWithPath:soundOne1];
AVAsset *avAsset1 = [AVURLAsset URLAssetWithURL:url1 options:nil];
NSArray *tracks1 = [avAsset1 tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack1 = [[avAsset1 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack1 atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionAudioTrack2 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack2 setPreferredVolume:1.0];
NSString *soundOne2 =[[NSBundle mainBundle]pathForResource:@"song" ofType:@"caf"];
NSURL *url2 = [NSURL fileURLWithPath:soundOne2];
AVAsset *avAsset2 = [AVURLAsset URLAssetWithURL:url2 options:nil];
NSArray *tracks2 = [avAsset2 tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *clipAudioTrack2 = [[avAsset2 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset2.duration) ofTrack:clipAudioTrack2 atTime:kCMTimeZero error:nil];
AVAssetExportSession *exportSession = [AVAssetExportSession
exportSessionWithAsset:composition
presetName:AVAssetExportPresetAppleM4A];
if (nil == exportSession) return NO;
NSString *soundOneNew = [documentsDirectory stringByAppendingPathComponent:@"combined10.m4a"];
//NSLog(@"Output file path - %@",soundOneNew);
// configure export session output with all our parameters
exportSession.outputURL = [NSURL fileURLWithPath:soundOneNew]; // output path
exportSession.outputFileType = AVFileTypeAppleM4A; // output file type
// perform the export
[exportSession exportAsynchronouslyWithCompletionHandler:^
if (AVAssetExportSessionStatusCompleted == exportSession.status)
NSLog(@"AVAssetExportSessionStatusCompleted");
else if (AVAssetExportSessionStatusFailed == exportSession.status)
// a failure may happen because of an event out of your control
// for example, an interruption like a phone call comming in
// make sure and handle this case appropriately
NSLog(@"AVAssetExportSessionStatusFailed");
else
NSLog(@"Export Session Status: %d", exportSession.status);
];
return YES;
【讨论】:
【参考方案2】:您不会找到任何用于执行此操作的预卷工具,但是一旦您将录音位记录下来,这并不太难。之后,您需要将文件与背景音乐混合,只需将原始样本相加即可。
为了使该部分正常工作,您需要将背景音乐从您使用的任何压缩格式解码为原始 PCM,以便您可以直接处理样本。我已经很久没有做任何 iOS 开发了,所以我不知道 iOS SDK 是否能够直接执行此操作,或者您是否需要将 libffmpeg 与您的代码捆绑在一起(或类似的东西)。但是 IIRC,iPhone 确实支持将压缩音频解码为 PCM,但不支持对其进行编码(稍后会详细介绍)。
否则,您可以将压缩(作为 zip,而不是 mp3/aac/ogg/whatever)原始 PCM 文件与您的应用一起分发并解压缩以直接获取示例数据。
获得最终混音后,您可以将其作为原始 PCM 直接通过播放设备流式传输回来。如果需要保存或导出,则需要再次查看解码/编码库。
根据有关此问题的经验,您可能希望在与背景音乐混合之前对人声进行一些基本处理。首先,您需要将背景音轨标准化为 -3dB(左右),以便在音乐中可以听到用户的声音。其次,您应该对人声应用高通滤波器以去除所有低于 60Hz 的频率,因为 iPhone 的麦克风可以拾取风声或其他背景噪音。最后,您可能希望对人声样本应用压缩 + 限制器,以使人声在安静的伸展过程中更容易听到。
不幸的是,您提出的问题并不像“仅使用函数 mixdownTracksTogether()”那么简单,但您绝对可以通过将其他工具和函数链接在一起来实现此功能。希望这能让你走上正轨!
【讨论】:
以上是关于怎么通过程序(如python)判断一个音频文件(如wav、mp3等格式)的声音清晰度?的主要内容,如果未能解决你的问题,请参考以下文章