我想知道是否可以用Xcode以编程方式录制mp3格式的音频文件.
我已经阅读了大量的文件,我已经用Google搜索了,但没有结果.
请帮忙,如果有人知道这是怎么回事?
我需要同时播放和录制.问题是播放和录制的声音应该不同.播放的sound_1通过耳机插孔连续发送到连接的设备,设备分析此声音_1并通过耳机插孔发回另一个声音_2.我收到了这个声音_2,但是当我尝试录制它时,我混合了sound_1和sound_2.有没有办法单独播放/录制,或者我需要某种过滤器来传入声音2?我尝试用AVAudioPlayer播放声音并用AudioQueue录音,会话是PlayAndRecord.
发现了一些类似的主题:在iOS中播放和录制音频同时使用耳机插孔引脚?
但也没有建设性的答案.
我根据Apple的SpeakHere音频应用示例编写了一个小型录音机/播放器,可以在我的iPad上使用.当用户要求显示录像机时,UIView将打开并显示录制/停止按钮和仪表.
当我从头开始加载应用程序时,我可以记录,停止记录,再次记录我想要的任何时间.停止录制后,我将应用程序放在后台,例如阅读我的邮件.再次将录音机置于前台时,无法录制任何声音.我在日志中收到错误消息,仪表不显示任何数据,也没有创建声音文件.我注意到与iPhone和iPad上的SpeakHere示例应用程序相同的行为.唯一的解决方案是退出并重新启动应用程序.
为了解决这个问题,我决定在用户完成录像机的使用后取消分配视图控制器.我为记录视图控制器禁用了ARC,并编写了dealloc方法.在这个控制器的viewDidDisappear中,我进行了[self dealloc]调用.
但程序崩溃,发送[RecorderViewController childViewControllersCount]:消息发送到解除分配的实例.我想这样的自我dealloc是不允许的......
我需要找到一个解决方案,或者......
找到一种在应用程序进入后台时正确管理音频会话的方法(因为录制停止,我不明白为什么会出现这样的问题).
或者在视图关闭时正确释放录像机视图控制器,以确保在视图必须出现的任何时候,它都会从控制器的XIB文件中再次加载.
[更新]在查看aurioTouch应用程序的代码(Apple dev网站的另一个音频示例)后,我在我的应用程序委托中获得了以下代码:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
AudioSessionSetActive(true);
}
Run Code Online (Sandbox Code Playgroud)
它可以在我的应用程序或SpeakHere应用程序中运行...花了很多时间找到一个解决方法,这是一行代码!
我有基本的网站,我在Django和SQL lite中开发.我想为它添加此功能.
用户应该能够单击按钮并记录不超过10秒的消息并保存.
它可以作为音频文件保存在服务器上,或者可以保存在数据库中,如果它更有效和可能的话.
如果Django已经有任何组件或插件或者我可以使用的东西,你能告诉我吗?
如果它不存在,我最好的选择是什么.如果我需要从头开始编写,你能指点我任何教程/博客等吗?
谢谢你的时间
我正在使用recorder.js在我的网页上录制两个音频文件,然后创建录音为blob.
一旦我有了这些音频blob,我就会将它们组合成一个轨道,由另一个html5音频播放器播放.
我搜索过互联网,但我似乎无法找到任何关于将两个blob文件合并为一个的文档.
我已经找到了如何将一个blob连接到另一个blob但我想在开始时合并文件.
即 - 声音1是唱歌,声音2是吉他.
我正在开发从麦克风录制声音的应用程序,目前我将录制的音频存储在wave文件中,但是wave的大小正成为一个问题。
我才知道android没有mp3解码器是真的吗?我将如何以压缩形式存储录制的音频?
我正在使用AudioRecord类进行录制,并且不想使用MediaRecorder。
我们有一个应用程序,主要是一个基于javascript的Web应用程序的UIWebView.我们遇到的要求是能够向用户播放音频然后记录用户,回放该记录以进行确认,然后将音频发送到服务器.这适用于Chrome,Android和其他平台,因为该功能内置于浏览器中.不需要本机代码.
遗憾的是,iOS(iOS 8/9)Web视图缺乏录制音频的能力.
我们尝试的第一个解决方法是使用AudioQueue录制音频并将数据(LinearPCM 16bit)传递给JS AudioNode,以便Web应用程序可以像处理其他平台一样处理iOS音频.这就达到了我们可以将音频传递给JS的程度,但应用程序最终会因内存访问错误而崩溃,或者javascript方面无法跟上发送的数据.
下一个想法是将录音保存到文件并将部分音频数据发送到JS以获得视觉反馈,这是在录制期间显示的基本音频可视化器.
线性PCM签名为16bit时,音频记录并播放到WAVE文件.JS可视化工具是我们陷入困境的地方.期待线性PCM无符号8位,所以我添加了一个可能错误的转换步骤.我尝试了几种不同的方式,主要是在网上找到的,但是在我们进入转换步骤之前,没有找到一种可以让我认为其他错误或缺失的方法.
由于我不知道问题究竟是什么或在哪里,我将转储下面的代码用于音频录制和播放类.欢迎任何建议解决或绕过某种方式解决此问题.
我的一个想法是使用不同的格式标记以不同的格式(CAF)进行记录.查看生成的值,非带符号的16位整数甚至接近最大值.我很少看到+/- 1000以上的任何东西.是因为AudioStreamPacketDescription中的kLinearPCMFormatFlagIsPacked标志?删除该标志会因为格式无效而导致音频文件无法创建.也许切换到CAF会起作用,但我们需要在将音频发送回服务器之前转换为WAVE.
或者我从签名的16位到无符号8位的转换是错误的?我也试过了比特换档和铸造.唯一的区别是,通过此转换,所有音频值都被压缩到125到130之间.位移和转换将其更改为0-5和250-255.这并没有真正解决JS方面的任何问题.
下一步是,不是将数据传递给JS,而是通过FFT函数运行它,并生成JS直接用于音频可视化器的值.在去那个方向之前,我宁愿弄清楚我是否做了一些明显错误的事情.
AQRecorder.h - 编辑:将更新的音频格式更新为LinearPCM 32bit Float.
#ifndef AQRecorder_h
#define AQRecorder_h
#import <AudioToolbox/AudioToolbox.h>
#define NUM_BUFFERS 3
#define AUDIO_DATA_TYPE_FORMAT float
#define JS_AUDIO_DATA_SIZE 32
@interface AQRecorder : NSObject {
AudioStreamBasicDescription mDataFormat;
AudioQueueRef mQueue;
AudioQueueBufferRef mBuffers[ NUM_BUFFERS ];
AudioFileID mAudioFile;
UInt32 bufferByteSize;
SInt64 mCurrentPacket;
bool mIsRunning;
}
- (void)setupAudioFormat;
- (void)startRecording;
- (void)stopRecording;
- (void)processSamplesForJS:(UInt32)audioDataBytesCapacity audioData:(void *)audioData;
- (Boolean)isRunning;
@end
#endif
Run Code Online (Sandbox Code Playgroud)
AQRecorder.m - 编辑:将更新的音频格式更新为LinearPCM 32bit Float.在processSamplesForJS中添加了FFT步骤,而不是直接发送音频数据.
#import <AVFoundation/AVFoundation.h>
#import "AQRecorder.h"
#import "JSMonitor.h" …Run Code Online (Sandbox Code Playgroud) 我使用以下方法在文档文件夹中录制了一些声音
func record() {
self.prepareToRecord()
if let recorder = self.audioRecorder {
recorder.record()
}
}
let recordSettings = [
AVSampleRateKey : NSNumber(float: Float(44100.0)),
AVFormatIDKey : NSNumber(int: Int32(kAudioFormatAppleLossless)),
AVNumberOfChannelsKey : NSNumber(int: 2),
AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue)),
AVEncoderBitRateKey : NSNumber(int: Int32(320000))
]
func prepareToRecord() {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let soundFileURL: NSURL? = NSURL.fileURLWithPath("\(documentsPath)/recording.caf")
print("\(soundFileURL)")
self.audioRecorder = try! AVAudioRecorder(URL: soundFileURL!, settings: recordSettings)
if let recorder = self.audioRecorder {
recorder.prepareToRecord()
}
}
Run Code Online (Sandbox Code Playgroud)
此方法将音频文件保存为recording.caf到文档目录,但我想将此recording.caf文件转换为mp3以进行进一步操作.
如何将这个.caf文件转换为swift中的.mp3文件?
我正在编写一个应用程序,用于在iPhone 6上使用内置麦克风录制单声道音频.当配置为以8000 Hz录制时,应用程序按预期工作.这是代码
// Set up audio session
let session = AVAudioSession.sharedInstance()
// Configure audio session
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
var recordSettings = [String:AnyObject]()
recordSettings[AVFormatIDKey] = Int(kAudioFormatLinearPCM) as AnyObject
// Set the sampling rate
recordSettings[AVSampleRateKey] = 8000.0 as AnyObject
recordSettings[AVNumberOfChannelsKey] = 1 as AnyObject
recorder = try AVAudioRecorder(url: outputFileURL, settings: recordSettings)
recorder?.delegate = self
recorder?.isMeteringEnabled = true
recorder?.prepareToRecord()
return true
}
catch {
throw Error.AVConfiguration
}
Run Code Online (Sandbox Code Playgroud)
为了降低存储要求,我想以更低的采样率(理想情况下小于1000 Hz)进行记录.如果我将采样率设置为1000 Hz,应用程序记录为8000 Hz.
根据Apple的文档,
硬件采样率的可用范围取决于设备.它通常在8000到48000赫兹之间.
问题...是否可以使用AVAudioSession(或其他框架)以低采样率录制音频?
我浪费了很多时间在正在建立的网站上实施多个音频录制选项,但是每个选项只能在Chrome中运行,只能在Firefox中运行,而不能同时在Safari中运行,而在iOS上均不工作。
该网站需要允许用户记录其消息并将其保存为表单状态以供提交。
我正在阅读的所有当前文章都有几个月的历史,并提到iOS不会/将很快支持它。我已经尝试过在iOS上使用移动Chrome浏览器,但仍然无法正常运行。
有没有人找到一种简单地在浏览器以及移动网站中录制音频的方法?
我尝试过的事情:
当前使用适用于Chrome和Firefox的以下代码。
的HTML
<audio controls src="" id="audio"></audio>
<a class="button" id="record">Record</a>
<input type="hidden" id="audiofile" name="audiofile" value="" aria-hidden="true"/>
使用Francium语音库:
Java脚本
// Audio Recording for Phone Calls
$(document).on("click", "#record:not(.stop)", function(){
elem = $(this);
$("#audio").attr("src","");
$("#audiofile").val("");
Fr.voice.record($("#live").is(":checked"), function(){
elem.addClass("stop");
});
elem.html("Stop <label id='minutes'>00</label>:<label id='seconds'>00</label>");
var minutesLabel = document.getElementById("minutes");
var secondsLabel = document.getElementById("seconds");
var totalSeconds = 0;
setInterval(setTime, 1000);
function setTime() {
++totalSeconds;
secondsLabel.innerHTML = pad(totalSeconds % 60);
minutesLabel.innerHTML …Run Code Online (Sandbox Code Playgroud) audio-recording ×10
ios ×6
audio ×4
html5-audio ×2
android ×1
audioqueue ×1
avfoundation ×1
core-audio ×1
django ×1
html5 ×1
iphone ×1
java ×1
javascript ×1
mp3 ×1
recorder.js ×1
swift ×1
uiwebview ×1
xcode ×1