我试图创建一个音频缓冲区并将他发送到一个新类.在这个类中,我将使用AudioTracker播放此缓冲区,但它不起作用.我可以按时听到声音,但声音就像一个halleffect.我没有想到我的错误,也没有找到这个问题的答案.我希望你能帮助我.(对不起,我的英语不是最好的)Sorcecode:
public class input {
private static final String TAG = "Aufnahme";
private AudioRecord recorder = null;
private boolean isRecording = false;
private int SAMPLERATE = 8000;
private int CHANNELS = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
private int bufferSize = AudioRecord.getMinBufferSize(SAMPLERATE, CHANNELS,
AUDIO_FORMAT);
private Thread recordingThread = null;
public void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLERATE,
CHANNELS, AUDIO_FORMAT, bufferSize);
recorder.startRecording();
isRecording = true;
recordingThread = new Thread(new Runnable()
{
public void run() {
writeAudioData();
}
});
recordingThread.start();
} …Run Code Online (Sandbox Code Playgroud) 我现在正在编写一个应用程序,以便在用户进行一些练习时通过内部扬声器提供声音反馈。
现在我想添加一个功能来记录用户的心跳并通过一个由 3.5 毫米插孔插入手机的听诊器呼吸。问题是当我插入插孔时,扬声器不会播放任何声音,因为手机认为耳机已连接并且声音将通过它们播放。
我想要实现的是通过插入手机的听诊器录制声音,同时通过内置扬声器播放声音。
基本上我使用两种方法来播放声音,MediaPlayer 和 TextToSpeech。
我在互联网上搜索,找到了这些文章:
他们告诉我要做的是添加权限 MODIFY_AUDIO_SETTINGS 到清单
声明变量:
MediaPlayer mediaPlayer;
AudioManager mAudioManager;
HashMap<String, String> mHashAlarm = new HashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)
在 OnCreate 方法中?
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setSpeakerphoneOn(true);
mediaPlayer = MediaPlayer.create(context, R.raw.ding);
mHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC));
...
tts.speak(text, TextToSpeech.QUEUE_FLUSH, mHashAlarm);
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用。
有谁知道如何实现这个功能?任何想法都会有很大帮助。谢谢。
我需要检索AudioRecord class读取缓冲区的时间戳。我需要以毫秒为单位跟踪时间。我尝试在读取缓冲区后添加时间戳检索,但是当我收到下一个缓冲区时,检索它所需的时间可能会波动很大。有没有办法从回调中接收录制音频的时间?
int bufferReadResult = audioRecord.read(buffer, 0,blockSize);
long startTime = System.nanoTime()/ 1000;
Run Code Online (Sandbox Code Playgroud)
是我目前正在尝试的。
我正在尝试使用 RecorderJS 库(https://github.com/mattdiamond/Recorderjs),它要求我有一个 AudioContext。但是,在我的脚本开头声明 AudioContext 时,我在页面加载时在控制台中收到一条错误消息,显示“ReferenceError:AudioContext 未定义”。像其他人一样遇到过这样的 AudioContext 问题吗?我已经发布了我的 JS 片段和包含所有内容的 HTML。提前致谢!
JS:
var audioContext = new AudioContext();
var audioInput = null, inputPoint = null, audioRecorder = null;
$(document).ready(function(){
// recording stuff
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<!DOCTYPE html>
<html>
<head>
<title>Recording</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel='stylesheet' type='text/css' href='stylesheet.css'/>
<script src="http://cwilso.github.io/AudioContext-MonkeyPatch/AudioContextMonkeyPatch.js"></script>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="recorder.js"></script>
<script src="script.js"></script>
</head>
<body>
<button class="record" type='button'>Record</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 过去几周我一直在阅读 Java Sound API,但我仍然不知道这是否可行。我之所以这么问是因为我想编写一个程序,该程序将通过系统的声音数据传送到输出线路,例如计算机的扬声器或耳机插孔,并将该数据写入音频文件。
从我读迄今约javax.sound.sampled,好像我可以从数据只读Mixer通过TargetDataLine; 然而,在编写了一个测试程序(下面提供)来查询我的系统以获取可用的混合器,然后查询这些混合器以获取可用的目标和源数据线;我意识到我所有的输出混音器除了我的默认混音器只支持SourceDataLines。此外,我无法判断TargetDataLine计算机的默认混音器(我有一台 Macbook pro)是否可以读取从其他应用程序发送到混音器的音频数据。所以在我深入研究这个项目之前,我想弄清楚是否有可能访问其他应用程序通过混音器发送的声音。
import javax.sound.sampled.*;
import java.util.Scanner;
public class Capture {
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_RESET = "\u001B[m";
private Mixer mixer;
public Capture() {
Mixer.Info[] installedMixers = AudioSystem.getMixerInfo();
for(int n = 0; n < installedMixers.length; n++) {
System.out.println(ANSI_GREEN + "[" + n + "] " + ANSI_RESET + …Run Code Online (Sandbox Code Playgroud) 我正在使用Android上的第三方云服务进行语音识别,并且它适用于Android API SpeechRecognizer.代码如下:
Intent recognizerIntent =
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
// accept partial results if they come
recognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
//need to have a calling package for it to work
if (!recognizerIntent.hasExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE)) {
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.example.speechrecognition");
}
recognizer = SpeechRecognizer.createSpeechRecognizer(context);
recognizer.setRecognitionListener(this);
recognizer.startListening(recognizerIntent);
Run Code Online (Sandbox Code Playgroud)
同时,我想用不同的音频设置录制音频,如频率,频道,音频格式等.然后我会不断分析这个音频缓冲区.我使用AudioRecord来达到目的.这只适用于我关闭语音识别.
如果我同时录制音频和语音识别,则会发生错误.
E/AudioRecord: start() status -38
Run Code Online (Sandbox Code Playgroud)
如何实现这种功能,我也试过原生音频 - SLRecordItf,也行不通.
spoken1 = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if(status != TextToSpeech.ERROR){
spoken1.setLanguage(Locale.US);
}
}
})
f1 = new File("test1.wav");
abc = spoken1.synthesizeToFile("text",null, f1, "test12");
Run Code Online (Sandbox Code Playgroud)
大家好,我是android和java开发的新手。目前我正在为将 TTS 转换为音频文件的小应用程序工作。我还让应用程序说出我想要的。我坚持使用在 API 级别 21 及更高版本中已弃用的 SynthesizeToFile。“abc”变量的值总是“-1”。我也在谷歌上找到了一些帮助,但结果是 API 级别 21 及以上没有答案
有人知道如何使 synthesizeToFile 方法返回正值吗?并将音频文件也获取到媒体库?
编辑:我找到了原因,如何授予创建文件的权限是在 Android 版本之间更改,在我的本地 VM 上,它是 Android API 级别 24,它应该请求运行权限,并且清单中的更改权限对于 API 级别 24 来说不够。
另外如果 API 级别 22 及以下,代码运行良好。
android text-to-speech audio-recording media-player writetofile
对于 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
我正在尝试制作一个可以记录屏幕同时可以记录输入和输出音频的应用程序。我在网上查了很多东西,但找不到任何可以一起做的事情。
我试图用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) 我正在尝试使用 AudioKit 为 iOS 实现 SLM 应用程序。因此,我需要确定不同的响度值以 a) 显示当前响度(平均超过一秒)和 b)做进一步的计算(例如计算更长的时间跨度内的“等效连续声级”)。该应用程序应该能够跟踪频率加权分贝值,如 dB(A) 和 dB(C)。
我确实理解我面临的一些问题与我在信号和音频处理领域普遍缺乏了解有关。我的问题是如何使用 AudioKit 来完成这项任务。我将描述我当前的流程并希望获得一些意见:
AKMicrophone和 a的实例AKFrequencyTrackerTimer具有一定间隔的实例(当前1/48_000.0)amplitude和frequency。根据振幅计算分贝值20 * log10(amplitude) + calibrationOffset(校准偏移将在专业 SLM 的帮助下确定每个设备型号)。根据频率加权(A 和 C)计算检索到的频率的偏移,并将这些应用于初始 dB 值。将 dB、dB(A) 和 dB(C) 值存储在一个数组中。我在其他地方读到使用计时器这不是最好的方法。还有什么可以用于“采样”?究竟是什么frequency的AKFrequencyTracker?这个频率是否足以确定 dB(A) 和 dB(C) 值,还是我需要一个AKFFTTap?如何从AKFrequencyTracker平均值中检索值,即 RMS 使用什么时间范围?
可能相关的问题:在 swift 中从 AudioKit 获取 dB(a) 级别,AudioKit FFT 转换为 dB?
audio-recording ×10
android ×5
audio ×4
audiokit ×1
audiorecord ×1
c# ×1
entitlements ×1
html ×1
ios ×1
iphone ×1
java ×1
javascript ×1
javasound ×1
macos ×1
media-player ×1
nanotime ×1
naudio ×1
speaker ×1
swift ×1
writetofile ×1