为iPhone开发应用程序,其中包含需要通过耳机收听的音频文件.
如何检查耳机是否未插入,以便告诉用户插入耳机.
我有来自另一个线程的以下代码,但不推荐使用audioSessionGetProperty方法.任何人都知道如何更改以下代码以使其工作或拥有自己的代码/解决方案.
谢谢.
- (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;
//Maybe changing it to something like the following would work for iOS7?
//AVAudioSession* session = [AVAudioSession sharedInstance];
//OSStatus error = [session setCategory:kAudioSessionProperty_AudioRoute...?
//the line below is whats giving me the warning
OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
&routeSize,
&route);
/* Known values of route:
* "Headset"
* "Headphone"
* "Speaker"
* "SpeakerAndMicrophone"
* "HeadphonesAndMicrophone"
* "HeadsetInOut"
* "ReceiverAndMicrophone"
* "Lineout"
*/
if (!error && (route != NULL)) …Run Code Online (Sandbox Code Playgroud) 我在iOS 6.1.3 iPad2和新iPad上运行SIP音频流应用程序.
我在iPad上启动了我的应用程序(没有插入任何内容).
音频工作.
我插上耳机.
应用程序崩溃:malloc:对象0x的错误....:没有分配被释放的指针或EXC_BAD_ACCESS
或者:
我在iPad上启动了我的应用程序(耳机已插入).
音频来自耳机.
我拔下耳机.
应用程序崩溃:malloc:对象0x的错误....:没有分配被释放的指针或EXC_BAD_ACCESS
应用代码采用基于http://code.google.com/p/ios-coreaudio-example/示例代码的AudioUnit api (见下文).
我使用kAudioSessionProperty_AudioRouteChange回调来获得更改感知.因此,OS声音管理器有三个回调:
1)处理录制的麦克风样本
2)为扬声器提供样本
3)通知音频硬件存在
经过大量测试后,我的感觉是棘手的代码是执行麦克风捕获的代码.在插入/拔出动作之后,大多数时候在调用RouteChange之前调用记录回调几次导致以后的"分段错误"并且永远不会调用RouteChange回调.更具体地说,我认为AudioUnitRender函数会导致"内存不良访问",而根本不会抛出异常.
我的感觉是,非原子记录回调代码与OS声音设备相关结构的更新竞争.因此,非原子性的记录回调更可能是OS HW更新和记录回调的并发性.
我修改了我的代码以使录制回调尽可能地薄,但我的感觉是我的应用程序的其他线程带来的高处理负载正在为之前描述的并发竞争提供支持.因此,由于AudioUnitRender访问不良,代码的其他部分会出现malloc/free错误.
我试图通过以下方式减少录制回调延迟:
UInt32 numFrames = 256;
UInt32 dataSize = sizeof(numFrames);
AudioUnitSetProperty(audioUnit,
kAudioUnitProperty_MaximumFramesPerSlice,
kAudioUnitScope_Global,
0,
&numFrames,
dataSize);
Run Code Online (Sandbox Code Playgroud)
我试图提出有问题的代码:
dispatch_async(dispatch_get_main_queue(), ^{
Run Code Online (Sandbox Code Playgroud)
有人有提示或解决方案吗?为了重现错误,这里是我的音频会话代码:
//
// IosAudioController.m
// Aruts
//
// Created by Simon Epskamp on 10/11/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "IosAudioController.h"
#import <AudioToolbox/AudioToolbox.h>
#define kOutputBus 0
#define kInputBus 1
IosAudioController* …Run Code Online (Sandbox Code Playgroud) 我似乎无法找到一种方法来了解Android是否插入了耳机.我发现了各种解决方案,但它们似乎总是返回假.唯一似乎正常工作的是a BroadcastReceiver,但这不是我需要的:
我只需要这样的东西
if(headphones plugged in) {
}
Run Code Online (Sandbox Code Playgroud)
有这样的功能吗?它需要一些特殊权限吗?
在看到Square使用iPhone上的耳机插孔发送信用卡数据后,我对此感兴趣.
iPhone,普通笔记本电脑和普通移动设备的耳机插孔的平均带宽是多少?
可以通过在不同的通道(左/右)上发送不同的数据流来加倍吗?
在测试过程中,客户注意到,当拔下耳机时,iPhone中的视频播放会暂停.他想要类似的音频播放功能,也许还能弹出一条消息.
有没有人知道是否有某种类型的事件我可以联系到这个可能吗?
我正在用一对a-JAYS Four耳机(有线遥控器/麦克风上有3个按钮)插上Galaxy Nexus(ICS 4.0.2)进行一些实验.
我的问题是,只有中间按钮被我编写的测试应用程序"识别",即在按下时触发KeyCode 79的Intent.ACTION_MEDIA_BUTTON和/或Activity.onKeyDown回调.
按下其他两个按钮不会触发任何以前的方法.有关信息,这些耳机及其3个按钮适用于Apple iPhone和Apple电脑(至少是MacBookPro 2011),正如盒子上标榜的那样......
首先,我认为Android或我的设备根本无法处理有线插孔遥控器上的多个按钮(即使这听起来很奇怪......)但是后来我尝试使用HTC的一对耳机(其中一个是他们的欲望设备)有3个按钮.中间按钮的反应方式与我的a- JAYS相同,但另外两个按钮也可以通过KeyCodes 87和88识别,分别是Play Previous和Play Next媒体键.
因此,似乎设备或Android的低级别层根本无法捕获某些耳机按钮信号:/(至少那些不是87和88)
任何人都知道如何使Android能够识别来自Apple兼容的耳机的其他按钮/信号?是否意味着低水平的司机为ICS写作,或者我错过了一些非常明显的东西?
任何帮助将非常感激.如果需要,可以发布我的测试应用程序代码.
干杯
我正在处理一个新项目,我必须通过具有特定电压的耳机插孔发送数据,然后我可以处理该电压.
所以在这里我需要编程具体的电压取决于我的数据.我有可能在android中访问耳机的输出电压,然后创建一个控制该电压的应用程序吗?
没有示例如何通过C#检测耳机是否插入.
我认为应该是一些事件......
使用WMI有意义吗?
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\cimv2",
"SELECT * FROM Win32_SoundDevice");
foreach (ManagementObject queryObj in searcher.Get())
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_SoundDevice instance");
Console.WriteLine("-----------------------------------");
Console.WriteLine("StatusInfo: {0}", queryObj["StatusInfo"]);
}
Run Code Online (Sandbox Code Playgroud)
有人会很高兴提供它吗?
谢谢!
当耳机插入或拔出耳机插孔时,我想收到通知.
我已经在stackoverflow上搜索了这个,但我似乎无法找到我正在寻找的Mac,我只能找到iOS.
那么,您对如何执行此操作有任何想法吗?我想要做的是:当耳机插入时,我想以编程方式暂停iTunes(类似iOS的功能).
谢谢!
我的任务是,如果有人知道如何创建一个可以通过设备的耳机插孔发送电荷的Android应用程序,就像在这个视频iPocket_LED中一样.该视频显示了一个iPhone应用程序,用于控制插入耳机插孔的LED.
我想知道如何访问设备发送电子信号.
抱歉我的英语,不是我的语言,我希望有人了解我
headphones ×10
android ×4
ios ×3
iphone ×2
objective-c ×2
.net ×1
audio ×1
audio-device ×1
audiotoolbox ×1
audiounit ×1
bandwidth ×1
button ×1
c# ×1
cocoa ×1
controls ×1
core-audio ×1
hardware ×1
ios7 ×1
jack ×1
macos ×1
mobile ×1