我现在正在编写一个应用程序,以便在用户进行一些练习时通过内部扬声器提供声音反馈。
现在我想添加一个功能来记录用户的心跳并通过一个由 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) 我正在尝试用C#开发录音机.我尝试过很多方法,比如NAudio,DirectX,Microsoft.Xna.Framework.Audio等.
一切都给出了相同的结果.我们停止录制后,输出文件mp3/wav得到保存.
mp3/wav文件在开头自己创建(没有和内容 - 0字节)
我正在尝试创建一个可以实时/同时保存音频的应用程序.
private void StartRecording() {
this.WaveSource = new WaveInEvent { WaveFormat = new WaveFormat(44100, 1) };
this.WaveSource.DataAvailable += this.WaveSourceDataAvailable;
this.WaveSource.RecordingStopped += this.WaveSourceRecordingStopped;
this.WaveFile = new WaveFileWriter(@"C:\Sample.wav", this.WaveSource.WaveFormat);
this.WaveSource.StartRecording();
}
private void StopRecording() {
this.WaveSource.StopRecording();
}
void WaveSourceDataAvailable(object sender, WaveInEventArgs e) {
if (this.WaveFile != null) {
this.WaveFile.Write(e.Buffer, 0, e.BytesRecorded);
this.WaveFile.Flush();
}
}
void WaveSourceRecordingStopped(object sender, StoppedEventArgs e) {
if (this.WaveSource != null) {
this.WaveSource.Dispose();
this.WaveSource = null;
}
if (this.WaveFile != null) {
this.WaveFile.Dispose();
this.WaveFile …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,也行不通.
所以我觉得我理解getFloatFrequencyData得很好。如果getFloatFrequencyData返回一个包含 1024 个值的数组,每个值代表一个频率仓/范围的音量。在采样率为 44.1 的 1024 个值的情况下,每个值将代表大约 20 赫兹频率范围的音量。
现在呢getFloatTimeDomainData?假设我有 2048 个值,每个值代表什么?
与理解网络音频中的 getByteTimeDomainData 和 getByteFrequencyData 不同。或者至少,这个问题的答案没有回答我的。
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
我正在使用媒体录音机在 android 中使用VOICE_COMMUNICATION&MIC模式记录通话。
RECORD_SOURCE = MediaRecorder.AudioSource.VOICE_COMMUNICATION;
//RECORD_SOURCE = MediaRecorder.AudioSource.MIC;
iAudioRecorder = new AudioRecord(RECORD_SOURCE, NATIVE_SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, RECORD_BUF_UNIT);
我看到MIC录制的音频数据比VOICE_COMMUNICATION某些设备的增益大得多 (大约 2/3 倍)。此外,所捕获的背景音乐VOICE_COMMUNICATION也不如MIC.
为什么这两种录音模式的音频质量(如增益、响应能力)不同?
android audio-recording android-mediarecorder android-audiorecord
我正在做一个小组项目。我们正在开发一个程序,可以接收音频并将其与保存的音频文件进行比较,如果输入和保存的文件匹配,则输出音频消息。
我们想用某种 python 方法比较音频文件,但我们找不到任何方法来做到这一点。我们正在寻找某种类型的库,以便能够从每个文件中获取数据并查看它们是否相似。
不知道如何开始。如果有人可以帮助我们开始或为我们指明正确的方向,我认为我们可以从那里开始。
我们已经看了几十个教程,在网上搜索过,但仍然需要一些主要的帮助。有人可以向我们解释如何开始吗?
audio-recording ×10
android ×5
audio ×4
audiorecord ×1
c# ×1
directx ×1
html ×1
java ×1
javascript ×1
javasound ×1
media-player ×1
nanotime ×1
naudio ×1
python ×1
speaker ×1
writetofile ×1
xna ×1