【问题标题】:Control volume of one channel in objective-c在objective-c中控制一个通道的音量
【发布时间】:2014-09-12 17:55:44
【问题描述】:

我有一个非常简单的带有 AVAudioPlayer 的音频播放器,(此时)有一首歌。 同时控制左右两个声道的音量很简单。

但是可以只控制左声道还是只控制右声道?

通过这种方式,我可以将左侧扬声器的音量设置为比右侧大一些,反之亦然。

【问题讨论】:

    标签: ios objective-c avaudioplayer volume


    【解决方案1】:

    应该咨询AVAudioPlayer reference 来回答这个问题。

    从界面可以看出不能直接控制左右声道,但是可以将pan从-1(全左)设置为1(全右)。也许这会实现您想要的?

    使用核心音频会困难得多,但它应该能够处理这个问题。使用 AVAudioPlayer 的另一种可能性是将声音分成不同的通道并分别播放。然后,您可以单独设置音量。文档中有一个示例说明如何确保两个声音同时播放。 (而且,您需要分别设置每个声音的声相,以便每个声音都能正确播放。)

    一种效率较低的方法是两个同时播放两个 .mp3 副本。 (警告:我没有测试过这段代码。)

    // assumes you have url for the file you want to play
    AVAudioPlayer *first = [[AVAudioPlayer alloc] initWithContentsOfURL:myUrl error:nil];
    AVAudioPlayer *second = [[AVAudioPlayer alloc] initWithContentsOfURL:myUrl error:nil];
    
    first.pan = -1; // only play on left channel
    second.pan = 1; // only play on right channel
    
    first.volume = 0.6;
    second.volume = 1.0;
    
    NSTimeInterval shortStartDelay = 0.01;
    NSTimeInterval now = player.deviceCurrentTime;
    
    [first  playAtTime: now + shortStartDelay];
    [second playAtTime: now + shortStartDelay];
    

    【讨论】:

    • 我也发现了,但结果有点奇怪。是否有另一类框架我可以用来制作一个有更多选择的新玩家(包括这个)?
    • 核心音频应该可以处理这个问题,但我建议您将音频文件分成左/右声道并分别播放两个声道。这将为您提供所需的控制。 (更新了我上面的答案以建议这一点。)
    • 这个问题是我之前必须这样做。我希望(当然,如果可能的话)让用户从他们自己的库中挑选一首歌曲。我想用那首歌分别控制每个通道的音量。这可能吗?
    • 有可能 - 我只是想为您找到最简单的方法来实现它。 (核心音频将是巨大的努力。)如果您一次播放两首歌曲,但只播放一个的左声道,另一个播放右声道。然后,您可以再次单独设置音量。
    • 这可能是个好主意。 Core Audio 可以做到吗?
    猜你喜欢
    • 2016-08-22
    • 2015-11-18
    • 2011-12-21
    • 2011-12-26
    • 2011-07-03
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多