标签: alsa

在Android自定义ROM中修改通话中语音播放

我想修改Android OS(AOSP的官方图片),为正常的电话回放声音添加预处理功能.

我已经为app音频播放实现了这种过滤(通过修改HALaudioflinger).

我只针对特定设备(Nexus 5X).另外,我只需要过滤播放 - 我不关心录制(上行链路).

更新#1:

为了说清楚 - 我可以修改特定于Qualcomm的驱动程序,或者在Nexus 5X上运行的任何部分,并且可以帮助我修改通话中的播放.

更新#2:

我正在尝试创建一个Java层应用程序,将手机播放实时路由到音乐流.

我已经成功地安装它作为系统的应用程序,获得权限初始化AudioRecordAudioSource.VOICE_DOWNLINK.但是,录音会给出空白样本; 它不记录语音通话.

这是我的工作线程中的代码:

// Start recording
int recBufferSize = AudioRecord.getMinBufferSize(44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_DOWNLINK, 44100, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, recBufferSize);

// Start playback
int playBufferSize = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT);
mTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, playBufferSize, AudioTrack.MODE_STREAM);

mRecord.startRecording();;
mTrack.play();

int bufSize = 1024;
short[] buffer = new short[bufSize];
int res;
while (!interrupted())
{
    // Pull recording buffers …
Run Code Online (Sandbox Code Playgroud)

android alsa android-source android-kernel android-rom

76
推荐指数
1
解决办法
1994
查看次数

使用TargetDataLine捕获Wine中的声音

我编写了一个用于测试目的的小型Java应用程序,它可以在ubuntu 12.04上从混音器中捕获声音.

代码工作正常,我可以从所有应用程序捕获声音,除了在Wine下运行的任何东西.

每当我启动我的程序时,在启动Wine之后,呼叫targetDataLine.read()将永远阻止

当Wine没有在后台运行时,它会0在没有输入时正确输出,或者如果有输入则读取字节数,如预期的那样.

如果我在启动Wine之前启动我的程序,那么声音驱动程序将无法在wine中使用.

我尝试过使用Alsa提供的混音器以及默认设备,结果相同.

我可以想象葡萄酒会以某种方式锁定Alsa(无论出于何种原因),但为什么一个简单的调用会TargetDataLine.read()导致Wine中的声音失败? mixerInfo[0]在我的系统btw上是默认的,并且应用程序当然总是使用oracle的最新JRE(7)在Wine之外运行.

private void readSound ()
{
    byte tempBuffer[] = new byte[10000];
    int cnt = 0;
    Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();

    System.out.println("Available mixers:");
    for (int p = 0; p < mixerInfo.length; p++)
        System.out.println(mixerInfo[p].getName());

    format = getAudioFormat();
    DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, format);
    Mixer mixer = AudioSystem.getMixer(mixerInfo[0]);

    try
    {
         targetDataLine = (TargetDataLine) mixer.getLine(dataLineInfo);
         targetDataLine.open(format);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    targetDataLine.start();

    while (true)
    {
        i++;
        cnt = targetDataLine.read(tempBuffer, …
Run Code Online (Sandbox Code Playgroud)

java linux audio wine alsa

49
推荐指数
1
解决办法
1338
查看次数

适用于Android的OpenSL ES教程

我一直在尝试使用可用于使用android 2.3进行本机音频的OpenSL ES库,但看起来头文件和规范的600页pdf是唯一可用的文档.

我应该在哪里寻找示例,教程或功能的简要概述?

audio android alsa opensl

39
推荐指数
4
解决办法
3万
查看次数

Android> 4.0:想法如何录制/捕获内部音频(例如STREAM_MUSIC)?

几个月前,在Android ICS(4.0)中,我开发了一个安卓内核模块,它拦截了"pcmC0D0p"模块以获取所有系统音频.

我的目标是通过AirPlay将所有音频(或至少播放的音乐)流式传输到远程扬声器.

内核模块工作,但有几个问题(内核版本,root权限等),所以我停止了这个.

现在,我们有Android 4.1和4.2,我有了新的希望!

谁知道如何在Android中捕获音频?

我有以下想法:

  1. 通过蓝牙连接 到同一部手机,设置路由到BT并抓住"另一端"的音频:这不应该工作

  2. 使用像以前那样的内核模块拦截音频:硬核,让它工作但不适用

  3. JACK音频连接套件:遗憾的是Android使用"tinyALSA"而不是"ALSA".TinyALSA不支持任何像JACK这样的过滤器(但这带来了内核模块的想法)

  4. 使用PulseAudio代替AudioFlinger,但这也不适用


编辑(忘了他们):

  1. 我从tinyALSA(Android上的ALSA )编译了"tinymix"(ALSA-mixer的婴儿版)并试图将音频输出到麦克风输入 - 但没有成功(对我来说不可理解).这也需要生根:不适用

  2. 我测试了OpenSL ES,但我不是C-crack,它的结尾是"我可以录制麦克风,但没有更多"(也许我错了?)


我刚刚找到了ROUTE_TYPE_LIVE_AUDIO:

支持实时音频路由的设备将允许将媒体音频流路由到支持的目的地.这可能包括设备本身的内置扬声器或音频插孔,A2DP设备等.

一旦启动,此路由对应用程序是透明的.媒体流上播放的所有音频都将路由到所选目的地.

也许这有助于任何方式?

我的想法已经不多了但是想"破解这个坚果",也许有人可以帮助我?

编辑:

我是C和内核编码的新手(但我成功地创建了一个交叉编译的音频拦截模块) - 但是在用户空间(JAVA)发送PCM数据的时候,它是不是可以用来监听,C层?)到内核空间(tinyALSA,内核模块),没有黑客攻击和生根?

audio android alsa capture

39
推荐指数
1
解决办法
2万
查看次数

通话录音 - 使其适用于Nexus 5X(可以使用root或自定义ROM)

我试图使用AudioRecordAudioSource.VOICE_DOWNLINK在Nexus 5X的Android 7.1(我自己的构建从AOSP).

我已经超过了权限阶段 - 将我的APK移动到特权应用程序,AudioRecord在Android源代码中进行了调整以停止抛出有关此源的异常.

现在我在通话期间得到空录音缓冲区.

我知道有很多通话录音应用程序,它们可以在其他设备上运行.我也看到某些应用程序可以对已植根的N5执行某些操作并使其正常工作.

我希望在Nexus 5X上实现同样的目标 - 任何调整对我来说都可以,包括更改Android版本,修改Qualcomm驱动程序,设备配置文件等等 - 基本上可以在自定义ROM中实现.

我已经尝试过使用平台代码 - 硬件/ qcom/audio/hal/voice.c,特别是功能voice_check_and_set_incall_rec_usecase,但到目前为止还没有意义.

还检查了device/lge/bullhead/mixer_paths.xml,发现有一个与呼叫记录相关的部分:

<!-- Incall Recording -->
<ctl name="MultiMedia1 Mixer VOC_REC_UL" value="0" />
<ctl name="MultiMedia1 Mixer VOC_REC_DL" value="0" />
<ctl name="MultiMedia8 Mixer VOC_REC_UL" value="0" />
<ctl name="MultiMedia8 Mixer VOC_REC_DL" value="0" />
<!-- Incall Recording End -->
Run Code Online (Sandbox Code Playgroud)

但我也无法理解它或它是如何得到帮助的.

android alsa android-mediarecorder android-audiorecord android-rom

34
推荐指数
1
解决办法
1108
查看次数

在docker容器中使用音频运行应用程序

这个问题的灵感来自于您是否可以在docker容器中运行GUI应用程序?.

基本的想法是运行带有音频和ui的应用程序(vlc,firefox,skype,...)

我正在使用pulseaudio搜索docker容器,但我发现所有使用pulseaudio流在tcp上的容器.(应用程序的安全沙箱)

在我的情况下,我会优先从容器内的应用程序直接播放音频到我的主机pulseaudio.(没有ssh隧道和臃肿的docker图像)

Pulseaudio因为我的qt app正在使用它;)

audio qt alsa pulseaudio docker

33
推荐指数
4
解决办法
3万
查看次数

PyAudio正在工作,但每次都会发出错误消息

我正在使用PyAudio来录制麦克风的输入.

由于音频录制对我来说很好,我应该尝试简单地抑制其错误消息吗?还是有办法解决它们?

ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or …
Run Code Online (Sandbox Code Playgroud)

python alsa pyaudio

32
推荐指数
4
解决办法
4万
查看次数

Android OpenAL?

有没有人为Android构建OpenAL,或者在系统上找到它的共享库?对于任何类型的游戏来说,这似乎是一个显而易见的需求,但它没有任何资源.似乎Android java声音库无法根据我所知道的进行音高变化,因此似乎需要OpenAL.我知道OpenAL Soft可以构建在ALSA之上,但我不确定是否有人这样做,我相信这需要一个月的时间.

如果在没有OpenAL的Android上进行声音操作的某个地方有一个很好的指导,那也没关系.这只是OpenAL的是那种对游戏厂商的一个标准,它会是不错的端口我千行到这个系统,我有点觉得是NDK之前,我荣登网站到它的点看,发现里面几乎没有系统上的共享库访问.

谢谢..我希望我能在不成为Java专家的情况下实际移植.到目前为止真的不喜欢NDK!

audio android openal alsa android-ndk

31
推荐指数
4
解决办法
3万
查看次数

从C代码设置ALSA主卷

我一直在寻找一个简单的C代码示例来设置ALSA混音器的主音量,但是对于这个所谓的常见操作却找不到任何简单的东西.

我对ALSA完全不熟悉,所以制作我自己的最小例子需要时间.如果有人能提供,我会很高兴.

c linux embedded mixer alsa

27
推荐指数
1
解决办法
2万
查看次数

如何以编程方式更改Ubuntu中的卷

你如何通过命令行或API(Python优先)以编程方式在Ubuntu上更改Gnome中的卷?

我发现类似问题的唯一答案amixer,似乎对Ubuntu 12.04没有影响.运行:

amixer set Headphone 10-
Run Code Online (Sandbox Code Playgroud)

说明:

Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 115
  Mono:
  Front Left: Playback 0 [57%] [-57.50dB] [on]
  Front Right: Playback 0 [57%] [-57.50dB] [on]
Run Code Online (Sandbox Code Playgroud)

每次运行时x%都会发生变化.不幸的是,它对实际音量没有影响.最终它表示0%,但音量仍然处于爆炸状态.

另一个缺点是我必须指定确切的有源输出设备,如果有多个设备,我可能不知道.例如,如果我有"Master"和"Headphone",我该如何确定哪一个是有源设备?

python audio ubuntu gnome alsa

25
推荐指数
3
解决办法
3万
查看次数