mp3单声道怎么转立体声

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mp3单声道怎么转立体声相关的知识,希望对你有一定的参考价值。

我下载了些MP3,但是是单声道的,效果不好!

有没有什么软件或者方法可以转换为立体声啊

参考技术A 可以用音频编缉软件来转换成立体声音乐,我用的是GoldWave来转换的,很多音频编缉软件都可以如:Audition1.5 Samplitude 8.0 等……1、首先打开GoldWave的主界面,然后点击〔文件〕下的〔打开〕你要转换的mp3音乐。2、等音乐打开以后点击〔文件〕下的〔新建〕弹出新声音对话框把采样比率调到44100HZ长度凋到你音乐的长度然后确定。3、点击你打开的mp3音乐后点击〔编缉〕〔复制〕 然后点击新建声音后点击〔编缉〕下的〔声道〕下的〔左声道〕后再点击〔编缉〕下的〔粘贴〕这时你的mp3音乐就粘贴到新建音乐的左声道音轨上。4、同样点击〔编缉〕下的〔声道〕下的〔右声道〕后再点击〔编缉〕下的〔粘贴〕这时你的mp3音乐就粘贴到新建音乐的右声道音轨上。5、点击〔编缉〕下的〔声道〕下的〔两者〕然后把音乐轨道上音乐部分划黑后点〔编缉〕下的〔删除〕把多余的长度删除。6、点击设备控制器的播放按键就可以试听你的立体声音乐了。7、关掉你原始的单声道音轨,点击〔文件〕下的〔另存为〕弹出另存为对话框在保存在下找到你保存的盘符把文件名改为你的音乐曲名,保存类型选你需要的类型如:mp3及wav等……,然后点保存就OK了! http://www.onlinedown.net/soft/5236.htm 软件连接下载地址 参考技术B 没办法转换的,即使转换了效果也不是真正的立体声; 劝你直接去百度或狗狗搜索,几乎都是立体声的

iOS 将立体声 mp3 拆分为单声道 aac

【中文标题】iOS 将立体声 mp3 拆分为单声道 aac【英文标题】:iOS split stereo mp3 to mono aac 【发布时间】:2016-02-14 12:16:46 【问题描述】:

我正在使用以下代码在 iOS 上将 mp3 转换为 m4a:iOS swift convert mp3 to aac

但我需要将左右声道提取到单独的 m4a 文件中。

我的这段代码正在工作,它将我的音频分割成 nsdata:

let leftdata:NSMutableData! = NSMutableData()
let rightdata:NSMutableData! = NSMutableData()

let buff: CMBlockBufferRef = CMSampleBufferGetDataBuffer(sampleBuffer!)!

var lengthAtOffset: size_t = 0
var totalLength:Int = 0
var data: UnsafeMutablePointer<Int8> = nil

if( CMBlockBufferGetDataPointer( buff, 0, &lengthAtOffset, &totalLength, &data ) != noErr ) 
    print("some sort of error happened")
 else 

    for i in 0.stride(to: totalLength, by: 2) 

        if(i % 4 == 0) 
            leftdata.appendBytes(data+i, length: 2)
         else 
            rightdata.appendBytes(data+i, length: 2)
        

    


data = nil

但是现在我需要将它转换为 CMSampleBuffer,以便我可以附加到资产编写器。如何将 nsdata 转换为样本缓冲区?

11 月 24 日更新 我现在有以下代码,它试图将 NSData 转换为 CMSampleBuffer。我不知道它失败的地方:

var dataPointer: UnsafeMutablePointer<Void> = UnsafeMutablePointer(leftdata.bytes)

var cmblockbufferref:CMBlockBufferRef?

var status = CMBlockBufferCreateWithMemoryBlock(nil, dataPointer, leftdata.length, kCFAllocatorNull, nil, 0, leftdata.length, 0, &cmblockbufferref)

var audioFormat:AudioStreamBasicDescription = AudioStreamBasicDescription()
audioFormat.mSampleRate = 44100
audioFormat.mFormatID = kAudioFormatLinearPCM
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian
audioFormat.mBytesPerPacket = 2
audioFormat.mFramesPerPacket = 1
audioFormat.mBytesPerFrame = 2
audioFormat.mChannelsPerFrame = 1
audioFormat.mBitsPerChannel = 16
audioFormat.mReserved = 0

var format:CMFormatDescriptionRef?

status = CMAudioFormatDescriptionCreate(kCFAllocatorDefault, &audioFormat, 0, nil, 0, nil, nil, &format);

var timing:CMSampleTimingInfo = CMSampleTimingInfo(duration: CMTimeMake(1, 44100), presentationTimeStamp: kCMTimeZero, decodeTimeStamp: kCMTimeInvalid)

var leftSampleBuffer:CMSampleBufferRef?

status = CMSampleBufferCreate(kCFAllocatorDefault, cmblockbufferref, true, nil, nil, format, leftdata.length, 1, &timing, 0, nil, &leftSampleBuffer)

self.assetWriterAudioInput.appendSampleBuffer(leftSampleBuffer!)

【问题讨论】:

我假设 CMBlockBuffer 将两个声道音频(立体声)存储在一维数组中,其中数据存储如下:[leftChannel_sample0, rightChannel_sample0, leftChannel_sample1...]? 【参考方案1】:

我们终于让它工作了!这是我们用来将 nsdata 转换为 samplebuffer 的最终 swift 代码:

func NSDataToSample(data:NSData) -> CMSampleBufferRef? 

    var cmBlockBufferRef:CMBlockBufferRef?

    var status = CMBlockBufferCreateWithMemoryBlock(nil, nil, data.length, nil, nil, 0, data.length, 0, &cmBlockBufferRef)

    if(status != 0) 
        return nil
    

    status = CMBlockBufferReplaceDataBytes(data.bytes, cmBlockBufferRef!, 0, data.length)

    if(status != 0) 
        return nil
    

    var audioFormat:AudioStreamBasicDescription = AudioStreamBasicDescription()

    audioFormat.mSampleRate = 44100
    audioFormat.mFormatID = kAudioFormatLinearPCM
    audioFormat.mFormatFlags = 0xc
    audioFormat.mBytesPerPacket = 2
    audioFormat.mFramesPerPacket = 1
    audioFormat.mBytesPerFrame = 2
    audioFormat.mChannelsPerFrame = 1
    audioFormat.mBitsPerChannel = 16
    audioFormat.mReserved = 0

    var format:CMFormatDescriptionRef?

    status = CMAudioFormatDescriptionCreate(kCFAllocatorDefault, &audioFormat, 0, nil, 0, nil, nil, &format)

    if(status != 0) 
        return nil
    

    var sampleBuffer:CMSampleBufferRef?

    status = CMSampleBufferCreate(kCFAllocatorDefault, cmBlockBufferRef!, true, nil, nil, format,  data.length/2, 0, nil, 0, nil, &sampleBuffer)

    if(status != 0) 
        return nil
    

    return sampleBuffer

【讨论】:

以上是关于mp3单声道怎么转立体声的主要内容,如果未能解决你的问题,请参考以下文章

mp3格式转换后没有了立体声

iOS 将立体声 mp3 拆分为单声道 aac

如何使用 naudio 将立体声 pcm 样本转换为单声道样本

AVPlayer 播放单声道音频立体声->单声道

音响单声道及立体声系统知识

FFMPEG:两个单声道到一个立体声文件,其持续时间是这两个单声道文件中最长的