- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在编写一个非常简单的应用程序,它在按下按钮时播放声音。由于当设备设置为静音时该按钮没有多大意义,我想在设备的音量为零时禁用它。 (并随后在再次调高音量时重新启用它。)
我正在寻找一种可行的(和 AppStore 安全的)方法来检测当前音量设置并在音量级别发生变化时获得通知/回调。我不想改变音量设置。
所有这些都在我的 ViewController
中实现,其中使用了所述按钮。我已经用运行 iOS 4.0.1 和 4.0.2 的 iPhone 4 以及运行 4.0.1 的 iPhone 3G 对此进行了测试。使用带有 llvm 1.5 的 iOS SDK 4.0.2 构建。 (使用 gcc 或 llvm-gcc 不会改进任何东西。)无论哪种方式,在构建过程中都没有问题,既没有错误也没有警告。静态分析器也很高兴。
这是我到目前为止尝试过的方法,但都没有成功。
按照 Apple 的音频服务文档,我应该为 kAudioSessionProperty_CurrentHardwareOutputVolume
注册一个 AudioSessionAddPropertyListener
,它应该像这样工作:
// Registering for Volume Change notifications
AudioSessionInitialize(NULL, NULL, NULL, NULL);
returnvalue = AudioSessionAddPropertyListener (
kAudioSessionProperty_CurrentHardwareOutputVolume ,
audioVolumeChangeListenerCallback,
self
);
returnvalue
为 0
,这意味着注册回调有效。
遗憾的是,当我按下设备上的音量按钮、耳机答题器或拨动铃声静音开关时,我的函数 audioVolumeChangeListenerCallback
从未得到回调。
当使用完全相同的代码注册 kAudioSessionProperty_AudioRouteChange
(在 WWDC 视频、开发人员文档和互联网上的许多网站上用作类似示例项目)时,我实际上 在更改音频路由时获得回调(通过插入/拔出耳机或对接设备)。
名为 Doug 的用户打开了一个标题为 iPhone volume changed event for volume already max 的线程他声称他成功地使用了这种方式(除非音量实际上不会改变,因为它已经设置为最大)。不过,它对我不起作用。
我尝试过的另一种方法是像这样在 NSNotificationCenter
上注册。
// sharedAVSystemController
AudioSessionInitialize(NULL, NULL, NULL, NULL);
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(volumeChanged:)
name:@"AVSystemController_SystemVolumeDidChangeNotification"
object:nil];
这应该通知我的方法 volumeChanged
任何 SystemVolume
更改,但实际上并没有这样做。
因为普遍的看法告诉我,如果一个人为了用 Cocoa 实现某件事而工作太过努力,那么他就是在做一些根本性的错误,我希望在这里能漏掉一些东西。很难相信没有简单的方法来获取当前的音量水平,但我一直无法使用 Apple 的文档、示例代码、谷歌找到一个, Apple 开发者论坛或观看 WWDC 2010 视频。
最佳答案
您是否有可能为 volumeChanged: 方法签名错误?这对我有用,转储在我的 appdelegate 中:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(volumeChanged:)
name:@"AVSystemController_SystemVolumeDidChangeNotification"
object:nil];
}
- (void)volumeChanged:(NSNotification *)notification
{
float volume =
[[[notification userInfo]
objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
floatValue];
// Do stuff with volume
}
每次按下按钮时,我的 volumeChanged: 方法都会被触发,即使音量没有因此改变(因为它已经处于最大/最小值)。
关于ios - 如何在 iOS 上获取音量级别和音量更改通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651252/
这样的问题:我有一个用两个声道录制的视频文件。我试图通过此代码关闭左声道: MediaPlayer mp; .... mp.setVolume(0.f, 1f); ... 在平板电脑上效果很好(右音量
我正在使用: SystemSoundID soundID; AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID); AudioS
是否可以使用代码更改 Mac 的音量? 最佳答案 如果您使用 C++ 进行编码,则可以使用 Carbon API http://developer.apple.com/carbon/您能更具体地说明您
我正在使用 HTML 5、jQuery 和 Amplitude.js 从头开始创建响应式音频播放器,用于实时流式传输。 播放器右侧是一个“扬声器图标”,单击该图标可静音,但只需悬停鼠标即可显示垂直
我在Flash Professional CC库中添加了声音,并让程序将其转换为MP3。如果我创建一个图层并将声音拖放到舞台上,则声音可以很好地播放(即使在通过Swiffy传递之后),但是到目前为止,
我正在尝试播放媒体类型为 STREAM_ALARM 的 radio 流,并使用硬件按钮更改其音量。 它需要是 STREAM_ALARM,因为它实际上是一个闹钟:即使插入耳机和/或手机设置为静音,它也应
我有 2 个媒体播放器播放不同的声音。我想使用 ProgressBar 来控制 MediaPlayer 的声音。 我知道如何使用进度条控制系统声音,但它会将两个媒体播放器的音量设置为相同,这就是我想要
我正在创建一个带有播放、暂停和音量 slider 的广播流媒体应用。 我已经使用 MPVolumeView 实现了音量 slider ,但遗憾的是它无法正常工作。 任何人都可以告诉我正确的代码,以便音
我到处搜索,但找不到问题的答案。 我在我的应用程序上播放多种声音,并让用户通过按钮调节音量。所以如果用户愿意的话,他可以用0.5的音量来播放。所以我有这个代码: NSString *path = [[
在我的应用程序中,我必须在点击按钮时播放警报声,当铃声音量设置为某个值时我可以播放它,但我的问题是当用户将铃声音量设置为零时,我该如何播放声音最大吗? 最佳答案 按照官方规定,你不能这样做。作为一名智
我好像找不到解决办法。请帮助我。 我想做的是有一个简单的音量 slider 。 所以,如您所见,橙色部分是我的音量 slider 。 这是我的 jQuery: var mouseDown = fals
Ubuntu 的启动/登录声音可能非常响亮,但我确实喜欢这样。我写了一个脚本,使用 amixer 将音量设置为 25%。这是我喜欢的音量,但当我使用电视输出或耳机时,我必须调高音量。我似乎无法让脚本在
我在 Android 上使用 APPRTCdemo 应用程序。我试图让它播放来自其他对等方的声音,与 Android 设置中设置的音量一样大。因此,如果用户将设备静音,则不会听到音频。我几乎尝试了每个
我正在为 ios7 编写一个应用程序,它需要控制内置音乐播放器的音量或一般的主音量级别。我试过使用 MediaPlayer.framework 但不确定是否正确。我想知道解决这个问题的最佳方法是什么。
我们的软件应该播放声音(不仅仅是小的噪音,还有语音等)。我想知道音量控制怎么样。 Windows Vista 风格指南说要在 Windows 混音器中定义应用程序特定的音量控制。 但是 Windows
我的应用程序的一部分有一个媒体组件,我正在寻找一个我可以使用的不错的音量 slider ,而不是为此目的看起来有点丑陋的 JSlider(或者具体来说,具有自定义视觉效果的扩展 JSlider 会很好
你好,我试着改变我的 SKAudioNode 的音量,有人知道怎么做吗?我试图找到解决方案,但没有找到......AudioNode 类对我来说似乎很薄。我也无法访问嵌套的 Audio 类以从那里尝试
基本上,如果我更改 slider 级别,它只会影响单击而不影响 keydown,即使它们调用相同的 playSound 函数也是如此。不知道我搞砸了什么 function App() { cons
我在 txt 中有一个文件列表,我需要连接(文件是相同的编解码器和大小并且有声音),而不是我需要添加一个音量为 50% 的音轨。谢谢 这是我用来连接的命令,但这用新的音轨替换了音频,相反我需要与文件中
我正在寻找在我的 .NET 2.0 WinForms 应用程序中使用的类似轨迹栏的用户/自定义控件。 注意:我不是在问如何控制 WinForms 应用程序中的音量。 任何人都知道可以在我的应用程序中使
我是一名优秀的程序员,十分优秀!