标签: audio-recording

Android 区分应用程序在后台和旋转事件

我的基本问题是弄清楚如何确定我的应用程序何时进入后台以及何时进行轮换。

我有一个用于音乐识别的录音服务。我想智能地管理该服务的生命周期以完成以下任务:

  1. 在最终导致设备轮换的生命周期事件期间保持服务运行。
  2. 当应用程序进入后台时停止服务(以释放麦克风)。

我无法覆盖,onConfigurationChanged因为我的应用程序使用带有以编程方式添加片段的操作栏选项卡,并且无法重新扩展片段布局。

克服这些挑战的好方法是什么?到目前为止,我最好的解决方案是更新服务中的计时器,但我想考虑替代方案。我不喜欢计时器,因为在使用语音搜索时,麦克风争用是很常见的。

android audio-recording android-service android-lifecycle

5
推荐指数
1
解决办法
1210
查看次数

以编程方式实现虚拟音频线

虚拟音频电缆是一种 Windows WDM 多媒体驱动程序,允许用户将音频流从一个应用程序传输到另一个应用程序。我想以编程方式实现此功能。我更喜欢用 c# 来做。任何开发人员都可以指导我如何做

audio multimedia audio-recording audio-streaming wdm

5
推荐指数
0
解决办法
1728
查看次数

使用 ALSA 在仅播放声卡上捕获播放

我的 hw:1,0 是仅播放的外部 USB 卡。如果记录应用程序尝试打开 hw:1,0 进行捕获,则无法捕获发送到 hw:1,0 的样本。alsamixer 没有为 hw:1,0 提供任何“[Capture]”选项 - 只有“[Playback]”选项卡上的一个音量控制。

是否可以创建一些虚拟的“xxx”设备,该设备接受来自播放应用程序的流并通过 2 个流(副本)将其发送出去 - 第一个流发送到真正的“hw:1,0”(发送到我的耳机),第二个流发送到真实的“hw:1,0”(发送到我的耳机)到另一个提供捕获能力的虚拟设备“zzz”,将流提供给可以打开“zzz”进行捕获的应用程序?

更新

我在内核中添加了 ALSA 环回设备,现在我有了环回设备。然后我发现工作 .asoundrc (见下文),但是当我使用 ffmpeg 捕获屏幕+声音时,声音比视频早得多,这是一些很大的同步问题。因此,通过这个 .asoundrc (如下),我可以使用 hw:0,0 (环回设备,hw:0,0 - 播放,hw:0,1 - 捕获)来捕获我发送到“默认”的内容。我还可以通过我的外部 USB hw:2,0 听到这些样本。

ffmpeg命令:

ffmpeg  -f alsa -i hw:0,1  -f x11grab -s 854x480 -r 30 -i :0.0 -vcodec libx264 -vb 4000k /tmp/screen_854x480.avi
Run Code Online (Sandbox Code Playgroud)

.asoundrc:

pcm.!default {
    type plug
    slave.pcm "mdev"
    route_policy "duplicate"

}

pcm.mdev {
    type multi

    slaves.a.pcm "hw:Loopback,0,0"
    slaves.a.channels 2
    slaves.b.pcm "dmixer"
    slaves.b.channels 2

    bindings.0.slave …
Run Code Online (Sandbox Code Playgroud)

linux audio alsa audio-recording

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

macOS 权利音频输入与麦克风

对于 macOS 沙箱,有两个授权密钥:

com.apple.security.device.audio-input
com.apple.security.device.microphone
Run Code Online (Sandbox Code Playgroud)

我测试了两者,都允许麦克风输入。

它们之间有什么区别?

macos audio-recording entitlements mac-app-store appstore-sandbox

5
推荐指数
1
解决办法
1841
查看次数

使用 C# SharpAvi 和 NAudio 录制带有输入和输出音频的屏幕

我正在尝试制作一个可以记录屏幕同时可以记录输入和输出音频的应用程序。我在网上查了很多东西,但找不到任何可以一起做的事情。

我试图用sharpavi 和naudio 做一些事情。底部的代码可以录制来自麦克风的声音的屏幕,也可以录制来自扬声器的声音。问题是来自麦克风的屏幕视频和音频会创建一个视频文件,而来自 spearkes 的声音会创建其他 mp3 文件。(如果我的老板想做我做不到的事情:)

所以我想创建包含屏幕记录、输入和输出语音的视频文件。我希望你能帮助我。

        private readonly int screenWidth;
        private readonly int screenHeight;

        private readonly AviWriter writer;
        private readonly IAviVideoStream videoStream;
        private readonly IAviAudioStream audioStream;

        private readonly WaveInEvent audioSource;
        private readonly Thread screenThread;

        private readonly ManualResetEvent stopThread = new ManualResetEvent(false);
        private readonly AutoResetEvent videoFrameWritten = new AutoResetEvent(false);
        private readonly AutoResetEvent audioBlockWritten = new AutoResetEvent(false);

        WasapiLoopbackCapture capture = new WasapiLoopbackCapture();
        WaveFileWriter writerx;

        public Recorder(string fileName,
            FourCC codec, int quality,
            int audioSourceIndex, SupportedWaveFormat audioWaveFormat, bool encodeAudio, int audioBitRate) …
Run Code Online (Sandbox Code Playgroud)

c# video-capture audio-recording naudio

5
推荐指数
1
解决办法
1107
查看次数

使用 AudioKit 测量(频率加权)声级

我正在尝试使用 AudioKit 为 iOS 实现 SLM 应用程序。因此,我需要确定不同的响度值以 a) 显示当前响度(平均超过一秒)和 b)做进一步的计算(例如计算更长的时间跨度内的“等效连续声级”)。该应用程序应该能够跟踪频率加权分贝值,如 dB(A) 和 dB(C)。

我确实理解我面临的一些问题与我在信号和音频处理领域普遍缺乏了解有关。我的问题是如何使用 AudioKit 来完成这项任务。我将描述我当前的流程并希望获得一些意见:

  1. 在此麦克风上创建AKMicrophone和 a的实例AKFrequencyTracker
  2. 创建一个Timer具有一定间隔的实例(当前1/48_000.0
  3. 在计时器内部:检索amplitudefrequency。根据振幅计算分贝值20 * log10(amplitude) + calibrationOffset(校准偏移将在专业 SLM 的帮助下确定每个设备型号)。根据频率加权(A 和 C)计算检索到的频率的偏移,并将这些应用于初始 dB 值。将 dB、dB(A) 和 dB(C) 值存储在一个数组中。
  4. 计算给定时间范围内数组的平均值(1 秒)。

我在其他地方读到使用计时器这不是最好的方法。还有什么可以用于“采样”?究竟是什么frequencyAKFrequencyTracker?这个频率是否足以确定 dB(A) 和 dB(C) 值,还是我需要一个AKFFTTap?如何从AKFrequencyTracker平均值中检索值,即 RMS 使用什么时间范围?

可能相关的问题:在 swift 中从 AudioKit 获取 dB(a) 级别AudioKit FFT 转换为 dB?

iphone audio-recording ios swift audiokit

5
推荐指数
0
解决办法
822
查看次数

是否可以从 .wav 文件创建 MediaStream?

我目前有一个从 navigator.getUserMedia() 接收 MediaStream 的函数,效果很好。我想提供上传音频文件的选项,并通过相同的功能模拟它。我想知道是否可以上传音频文件并创建一个 Mediastream 对象并通过以下函数传递它?

    startUserMedia(stream) {
    this.setState({ audio: stream });
    var audioContext = new AudioContext();
    var source = audioContext.createMediaStreamSource(stream);
    var processor = audioContext.createScriptProcessor(8192, 1, 1);

    source.connect(processor);
    processor.connect(audioContext.destination);

    const that = this;
    let audioBuffers = [];
    this.setState({ currentDuration: 0 });
    processor.onaudioprocess = function(e) {
      // Do something with the data, i.e Convert this to WAV
      if (that.state.currentDuration < that.state.chunkDuration) {
        that.setState({
          currentDuration: that.state.currentDuration + e.inputBuffer.duration
        });

        resampler(e.inputBuffer, 16000, function(event) {
          const buffer = event.getAudioBuffer();
          if (that.state.voiceActive) {
            audioBuffers.push(buffer); …
Run Code Online (Sandbox Code Playgroud)

javascript audio-recording webrtc

5
推荐指数
1
解决办法
1041
查看次数

如何使用 PlaybackCapture API 在 Android Q 上录制音频?

我正在尝试使用Playback Capture API在 Android 10(Q) 上录制音频。作为回放捕捉API,只允许记录声音与USAGE_GAMEUSAGE_MEDIAUSAGE_UNKNOWN,所以,我已经下载Uamp样品有USAGE_MEDIA播放歌曲时设定的。我还增加了android:allowAudioPlaybackCapture="true"AndroidManifest.xml。然后我启动了Uamp,开始播放歌曲并将其保留在后台。

我开发了一个带有 targetSdk 29的CaptureAudio项目,并将其安装在我安装了Android 10 的OnePlus 7 Pro 上。我在 UI 上有两个按钮用于开始和停止捕获。当应用程序开始捕获时,读取函数将填充缓冲区中的所有 0。

为了在项目中使用回放捕获,我设置如下:

1. 清单:

        <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.captureaudio">

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" …
Run Code Online (Sandbox Code Playgroud)

android audio-recording playback android-10.0

5
推荐指数
1
解决办法
2242
查看次数

在 SharpAvi 上将屏幕录制为视频、音频 - 音频未录制

要求:

我正在尝试使用带有NAudio Example的环回音频流的SharpAPI Example捕获 Windows 屏幕的音频/视频。

我正在使用 C#、wpf 来实现相同的功能。

几个 nuget 包。 SharpAvi - 用于视频捕获 NAudio - 用于音频捕获

取得的成果:

我已经成功地将它与提供的示例集成在一起,我正在尝试通过NAudioSharpAPI 视频流捕获音频,以便将视频与音频实现一起录制。

问题:

无论我在 SharpAvi 视频中编写音频流。 输出时,仅录制视频,音频为空。

单独检查音频以确保:

但是当我尝试将音频捕获为名为“output.wav”的单独文件时,它按预期录制了音频,并且能够听到录制的音频。所以,我现在得出的结论是,问题仅在于通过 SharpApi 与视频集成

writterx = new WaveFileWriter("Out.wav", audioSource.WaveFormat);

重现问题的完整代码:

https://drive.google.com/open?id=1H7Ziy_yrs37hdpYriWRF-nuRmmFbsfe-

来自 Recorder.cs 的代码概览

NAudio 初始化:

audioSource = new WasapiLoopbackCapture();

audioStream = CreateAudioStream(audioSource.WaveFormat, encodeAudio, audioBitRate);

audioSource.DataAvailable += audioSource_DataAvailable;
Run Code Online (Sandbox Code Playgroud)

捕获音频字节并将其写入 SharpAvi 音频流:

    private void audioSource_DataAvailable(object sender, WaveInEventArgs e)
    {
        var signalled = WaitHandle.WaitAny(new WaitHandle[] { videoFrameWritten, stopThread });
        if …
Run Code Online (Sandbox Code Playgroud)

c# wpf audio-recording naudio screencast

5
推荐指数
1
解决办法
642
查看次数

Web Audio API 获取当前播放音频的字节流

我的游戏中有几个活动的 AudioContext,它们由音频库 Howler.js 组织。这些 AudioContext 正在播放我游戏中的音频。除了播放音频之外,是否还可以记录当前播放音频的字节流?这看起来如何?我想通过 webrtc 将此音频发送给其他客户端。

在此先感谢您的帮助。

javascript audio-recording html5-audio web-audio-api

5
推荐指数
1
解决办法
661
查看次数