我正在开发一个iOS应用程序(目前专门针对iPhone),要求应用程序仅从iPhone内置麦克风录制音频(即使插入耳机/耳机),并在耳机播放(假设耳机已插入目前).
我想知道目前是否可以使用可用的API?如果是这样,有人可以说明我该如何做到这一点?
谢谢!
我正试图在我的应用程序中通过iPhone上的上扬声器播放音频,这是您在通话期间按下的那个.我知道这是可能的,因为我已经从App Store玩了一个游戏(通过"点击水龙头"的"The Heist")来模拟电话,并且正是如此.
我已经在网上做了很多研究,但我很难找到一个甚至讨论过这种可能性的人.绝大多数帖子似乎都是关于免提扬声器和插入式耳机(就像这个和这个和这个),而不是上部"电话"扬声器和免提扬声器.(部分问题可能没有一个好名字:"手机扬声器"通常意味着设备底部的免提扬声器等,所以很难做一个非常有针对性的搜索).我已经看过Apple了Audio Session Category Route Overrides,但是那些似乎(纠正我,如果我错了)只处理底部的免提扬声器,而不是手机顶部的扬声器.
我找到了一个似乎与此有关的帖子:链接.它甚至提供了一堆代码,所以我认为我在家是免费的,但现在我似乎无法让代码工作.为简单起见,我只是将DisableSpeakerPhone方法(如果我理解正确应该将音频重新路由到上层扬声器)复制到我的方法中viewDidLoad,看看它是否可行,但第一个"断言"行失败,音频继续发挥出底线.(我也按照评论中的建议导入了AudioToolbox框架,因此这不是问题.)
这是我正在使用的主要代码块(这是我复制到我viewDidLoad的测试中),尽管在我链接到的文章中还有一些方法:
void DisableSpeakerPhone () {
UInt32 dataSize = sizeof(CFStringRef);
CFStringRef currentRoute = NULL;
OSStatus result = noErr;
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &dataSize, ¤tRoute);
// Set the category to use the speakers and microphone.
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
result = AudioSessionSetProperty (
kAudioSessionProperty_AudioCategory,
sizeof (sessionCategory),
&sessionCategory
);
assert(result == kAudioSessionNoError);
Float64 sampleRate = 44100.0;
dataSize = sizeof(sampleRate);
result = …Run Code Online (Sandbox Code Playgroud) 据我所知,每当您覆盖 iPhone 中的音频路由时,您都必须同时更改输出和输入路由。我知道的唯一可用路线是:
“耳机”“耳机”“扬声器”“扬声器和麦克风”“耳机和麦克风”“耳机输入”“接收器和麦克风”“线路输出”
有没有办法从线路输入/耳机录音并通过扬声器播放?
ios ×2
audio ×1
audiotoolbox ×1
avfoundation ×1
core-audio ×1
iphone ×1
media-player ×1
microphone ×1