在objective-c中控制一个通道的音量

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 可以做到吗?

以上是关于在objective-c中控制一个通道的音量的主要内容,如果未能解决你的问题,请参考以下文章

如何控制 MIDI 通道的音量

请问水果做音乐FL STUDIO如何才能单独提高单轨道的音量???

音量控制 XP 与 Vista 不同的通道数

如何使用Naudio分别控制耳机左右声道的音量

使用 FFMPEG 仅更改其中一个音频通道的音量

硬件音量按钮和 Swift