2
A
回答
0
我假设你是“不能有权力,所以它不会说话”,你的意思是你只是想让扬声器静音。我在这里发现了一些简洁的示例代码,使用CoreAudio将系统的默认扬声器静音:http://cocoadev.com/index.pl?SoundVolume
我冒昧地将它转换为纯C并试用它。
#import <CoreAudio/CoreAudio.h>
#import <stdio.h>
// getting system volume
float getVolume() {
float b_vol;
OSStatus err;
AudioDeviceID device;
UInt32 size;
UInt32 channels[2];
float volume[2];
// get device
size = sizeof device;
err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
if(err!=noErr) {
printf("audio-volume error get device\n");
return 0.0;
}
// try set master volume (channel 0)
size = sizeof b_vol;
err = AudioDeviceGetProperty(device, 0, 0, kAudioDevicePropertyVolumeScalar, &size, &b_vol); //kAudioDevicePropertyVolumeScalarToDecibels
if(noErr==err) return b_vol;
// otherwise, try seperate channels
// get channel numbers
size = sizeof(channels);
err = AudioDeviceGetProperty(device, 0, 0,kAudioDevicePropertyPreferredChannelsForStereo, &size,&channels);
if(err!=noErr) printf("error getting channel-numbers\n");
size = sizeof(float);
err = AudioDeviceGetProperty(device, channels[0], 0, kAudioDevicePropertyVolumeScalar, &size, &volume[0]);
if(noErr!=err) printf("error getting volume of channel %d\n",channels[0]);
err = AudioDeviceGetProperty(device, channels[1], 0, kAudioDevicePropertyVolumeScalar, &size, &volume[1]);
if(noErr!=err) printf("error getting volume of channel %d\n",channels[1]);
b_vol = (volume[0]+volume[1])/2.00;
return b_vol;
}
// setting system volume
void setVolume(float involume) {
OSStatus err;
AudioDeviceID device;
UInt32 size;
Boolean canset = false;
UInt32 channels[2];
//float volume[2];
// get default device
size = sizeof device;
err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device);
if(err!=noErr) {
printf("audio-volume error get device\n");
return;
}
// try set master-channel (0) volume
size = sizeof canset;
err = AudioDeviceGetPropertyInfo(device, 0, false, kAudioDevicePropertyVolumeScalar, &size, &canset);
if(err==noErr && canset==true) {
size = sizeof involume;
err = AudioDeviceSetProperty(device, NULL, 0, false, kAudioDevicePropertyVolumeScalar, size, &involume);
return;
}
// else, try seperate channes
// get channels
size = sizeof(channels);
err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyPreferredChannelsForStereo, &size,&channels);
if(err!=noErr) {
printf("error getting channel-numbers\n");
return;
}
// set volume
size = sizeof(float);
err = AudioDeviceSetProperty(device, 0, channels[0], false, kAudioDevicePropertyVolumeScalar, size, &involume);
if(noErr!=err) printf("error setting volume of channel %d\n",channels[0]);
err = AudioDeviceSetProperty(device, 0, channels[1], false, kAudioDevicePropertyVolumeScalar, size, &involume);
if(noErr!=err) printf("error setting volume of channel %d\n",channels[1]);
}
int main() {
printf("The system's volume is currently %f\n", getVolume());
printf("Setting volume to 0.\n");
setVolume(0.0f);
return 0;
}
我跑,并得到这样的:
[04:29:03] [[email protected] ~/Documents/Programming/c]$ gcc -framework CoreAudio -o mute.o coreaudio.c
.. snipped compiler output..
[04:29:26] [[email protected] ~/Documents/Programming/c]$ ./mute.o
The system's volume is currently 0.436749
Setting volume to 0.
希望这向您发送了正确的方向。
相关问题
- 1. 当蓝牙在设备中关闭时接收蓝牙信号
- 2. 蓝牙API检测远程设备上的收音机关闭
- 3. 将设备地址发送到Android中的ConnectThread(蓝牙设备设备) - 蓝牙
- 4. iphone和蓝牙设备
- 5. UUID蓝牙和Android设备
- 6. Listview和OnItemClickListener(蓝牙设备)
- 7. 如何记录从蓝牙设备麦克风的声音和在设备扬声器播放
- 8. 关闭设备音量 - iOS设备
- 9. 蓝牙音频设备不配对
- 10. 如何使用Android蓝牙设备选取器检索蓝牙设备信息?
- 11. 使用蓝牙和应用程序打开/关闭设备
- 12. 是否可以在Cocoa/ObjC中“解除”蓝牙设备?
- 13. 蓝牙不发现设备
- 14. Android蓝牙设备缓存
- 15. 检测蓝牙设备“ID”
- 16. iPhone检测蓝牙设备
- 17. 查询蓝牙设备android
- 18. iPhone蓝牙设备名称
- 19. Android。连接蓝牙设备
- 20. 连接到蓝牙设备?
- 21. 蓝牙LE写入设备
- 22. 蓝牙设备未列出
- 23. 安卓:从蓝牙设备
- 24. Android蓝牙唤醒设备
- 25. Iphone检测蓝牙设备
- 26. 蓝牙设备扫描
- 27. 蓝牙扫描设备
- 28. EMDK蓝牙本地设备
- 29. Android蓝牙设备UUID
- 30. BlueCove蓝牙设备发现
你是什么意思“关闭”一个声音设备?对于蓝牙,请查看blueutil的源代码 - http://www.frederikseiffert.de/blueutil/ – 2011-03-02 05:55:20
我的意思是声音设备无法通电,因此无法说话。并感谢您的链接 – 2011-03-02 06:02:56