Простая запись Wave файлов.
Простая запись Wave файлов.
Всем приветов!
Решил отложить пока все, что делал раньше, и заняться звуком)
Хочу написать простенькое приложение:
Нажимаешь на кнопочку - пошла запись с микрофона.Нажимаешь на вторую кнопочку - запись остановилась.
В принципе я бы давно сделал это с помощью МедиаРекордер , но он не поддерживает wave формат(насколько я знаю).Придется обойтись Аудиорекордером..
Накидал что-то несвязное:
[syntax=java]package com.example.soundwrite;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
AudioRecord audioRecord;
boolean record = true;
int myBufferSize = 8192;
String fileName = "C:\\test\\test.wave";
File file;
FileOutputStream fos = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
createAudioRecorder();
start.setOnClickListener(this);
stop.setOnClickListener(this);
file = new File(fileName);
}
private void createAudioRecorder() {
int sampleRate = 16000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int minInternalBufferSize = AudioRecord.getMinBufferSize(sampleRate,
channelConfig, audioFormat);
int internalBufferSize = minInternalBufferSize * 4;
Log.d(TAG, "minInternalBufferSize = " + minInternalBufferSize
+ ", internalBufferSize = " + internalBufferSize
+ ", myBufferSize = " + myBufferSize);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, channelConfig, audioFormat, internalBufferSize);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
record = true;
Log.d(TAG, "record start");
audioRecord.startRecording();
Log.d(TAG, "read start");
new Thread(new Runnable() {
@Override
public void run() {
if (audioRecord == null) {
return;
}
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
byte[] myBuffer = new byte[myBufferSize];
int readCount = 0;
int totalCount = 0;
while (record) {
readCount = audioRecord.read(myBuffer, 0, myBufferSize);
try {
fos.write(myBuffer);
} catch (IOException e) {
e.printStackTrace();
}
totalCount += readCount;
Log.d(TAG, "readCount = " + readCount
+ ", totalCount = " + totalCount);
}
}
}).start();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
audioRecord.stop();
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
protected void onDestroy() {
super.onDestroy();
record = false;
if (audioRecord != null) {
audioRecord.release();
}
}
}
[/syntax]
Решил отложить пока все, что делал раньше, и заняться звуком)
Хочу написать простенькое приложение:
Нажимаешь на кнопочку - пошла запись с микрофона.Нажимаешь на вторую кнопочку - запись остановилась.
В принципе я бы давно сделал это с помощью МедиаРекордер , но он не поддерживает wave формат(насколько я знаю).Придется обойтись Аудиорекордером..
Накидал что-то несвязное:
[syntax=java]package com.example.soundwrite;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
AudioRecord audioRecord;
boolean record = true;
int myBufferSize = 8192;
String fileName = "C:\\test\\test.wave";
File file;
FileOutputStream fos = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
createAudioRecorder();
start.setOnClickListener(this);
stop.setOnClickListener(this);
file = new File(fileName);
}
private void createAudioRecorder() {
int sampleRate = 16000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int minInternalBufferSize = AudioRecord.getMinBufferSize(sampleRate,
channelConfig, audioFormat);
int internalBufferSize = minInternalBufferSize * 4;
Log.d(TAG, "minInternalBufferSize = " + minInternalBufferSize
+ ", internalBufferSize = " + internalBufferSize
+ ", myBufferSize = " + myBufferSize);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, channelConfig, audioFormat, internalBufferSize);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
record = true;
Log.d(TAG, "record start");
audioRecord.startRecording();
Log.d(TAG, "read start");
new Thread(new Runnable() {
@Override
public void run() {
if (audioRecord == null) {
return;
}
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
byte[] myBuffer = new byte[myBufferSize];
int readCount = 0;
int totalCount = 0;
while (record) {
readCount = audioRecord.read(myBuffer, 0, myBufferSize);
try {
fos.write(myBuffer);
} catch (IOException e) {
e.printStackTrace();
}
totalCount += readCount;
Log.d(TAG, "readCount = " + readCount
+ ", totalCount = " + totalCount);
}
}
}).start();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
audioRecord.stop();
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
protected void onDestroy() {
super.onDestroy();
record = false;
if (audioRecord != null) {
audioRecord.release();
}
}
}
[/syntax]
Re: Простая запись Wave файлов.
это что за путь?String fileName = "C:\\test\\test.wave";
Я наверно чего -то не понял, а в чем вопрос?
И зачем вам вообще wave формат?

Re: Простая запись Wave файлов.
БАМ!!Nachinka писал(а):Всем приветов!
Решил отложить пока все, что делал раньше, и заняться звуком)
Хочу написать простенькое приложение:
Нажимаешь на кнопочку - пошла запись с микрофона.Нажимаешь на вторую кнопочку - запись остановилась.
В принципе я бы давно сделал это с помощью МедиаРекордер , но он не поддерживает wave формат(насколько я знаю).Придется обойтись Аудиорекордером..
Накидал что-то несвязное:
[syntax=java]package com.example.soundwrite;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
AudioRecord audioRecord;
boolean record = true;
int myBufferSize = 8192;
String fileName = "C:\\test\\test.wave";
File file;
FileOutputStream fos = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
createAudioRecorder();
start.setOnClickListener(this);
stop.setOnClickListener(this);
file = new File(fileName);
}
private void createAudioRecorder() {
int sampleRate = 16000;
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int minInternalBufferSize = AudioRecord.getMinBufferSize(sampleRate,
channelConfig, audioFormat);
int internalBufferSize = minInternalBufferSize * 4;
Log.d(TAG, "minInternalBufferSize = " + minInternalBufferSize
+ ", internalBufferSize = " + internalBufferSize
+ ", myBufferSize = " + myBufferSize);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
sampleRate, channelConfig, audioFormat, internalBufferSize);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
record = true;
Log.d(TAG, "record start");
audioRecord.startRecording();
Log.d(TAG, "read start");
new Thread(new Runnable() {
@Override
public void run() {
if (audioRecord == null) {
return;
}
try {
fos = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
byte[] myBuffer = new byte[myBufferSize];
int readCount = 0;
int totalCount = 0;
while (record) {
readCount = audioRecord.read(myBuffer, 0, myBufferSize);
try {
fos.write(myBuffer);
} catch (IOException e) {
e.printStackTrace();
}
totalCount += readCount;
Log.d(TAG, "readCount = " + readCount
+ ", totalCount = " + totalCount);
}
}
}).start();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
audioRecord.stop();
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
protected void onDestroy() {
super.onDestroy();
record = false;
if (audioRecord != null) {
audioRecord.release();
}
}
}
[/syntax]
«Life is too short to spend rewriting code»
Re: Простая запись Wave файлов.
Для дальнейшей обработки) Хотя в принципе можно и не сохранять в файл , а переводить записанное в массив байтов, но что если я буду много раз записывать?)altwin писал(а):это что за путь?String fileName = "C:\\test\\test.wave";
Я наверно чего -то не понял, а в чем вопрос?
И зачем вам вообще wave формат?
сделал пока путь для файлов)
Вопрос в этом: Как правильно записать wav файлы на андроид)
Re: Простая запись Wave файлов.
Накидал еще один прмерчик, он уже запускается, но при нажатии на кнопку старт, приложение вылетает, видимо ошибка в startRecording();
[syntax=java]
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
boolean record = true;
String fileName = "C:\\test\\music\\lala4.WAVE";
File file;
private AudioRecord recorder = null;
private static final int sample_rate = 16000;
private static final int Mono = AudioFormat.CHANNEL_IN_MONO;
private static final int encoding = AudioFormat.ENCODING_PCM_16BIT;
private static final int BufferElements2Rec = 1024;
private static final int BytesPerElement = 2;
private static Thread recordingThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
start.setOnClickListener(this);
stop.setOnClickListener(this);
// file = new File(fileName);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
Log.d(TAG, "record start");
startRecording();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
stopRecording();
}
}
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, sample_rate,
Mono, encoding, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
record = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void stopRecording() {
if (null != recorder) {
record = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
private void writeAudioDataToFile() {
short sData[] = new short[BufferElements2Rec];
FileOutputStream os = null;
try {
os = new FileOutputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (record) {
recorder.read(sData, 0, BufferElements2Rec);
try {
byte bData[] = short2byte(sData);
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData >> 8);
sData = 0;
}
return bytes;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}[/syntax]
[syntax=java]
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
boolean record = true;
String fileName = "C:\\test\\music\\lala4.WAVE";
File file;
private AudioRecord recorder = null;
private static final int sample_rate = 16000;
private static final int Mono = AudioFormat.CHANNEL_IN_MONO;
private static final int encoding = AudioFormat.ENCODING_PCM_16BIT;
private static final int BufferElements2Rec = 1024;
private static final int BytesPerElement = 2;
private static Thread recordingThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
start.setOnClickListener(this);
stop.setOnClickListener(this);
// file = new File(fileName);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
Log.d(TAG, "record start");
startRecording();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
stopRecording();
}
}
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, sample_rate,
Mono, encoding, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
record = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void stopRecording() {
if (null != recorder) {
record = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
private void writeAudioDataToFile() {
short sData[] = new short[BufferElements2Rec];
FileOutputStream os = null;
try {
os = new FileOutputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (record) {
recorder.read(sData, 0, BufferElements2Rec);
try {
byte bData[] = short2byte(sData);
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData >> 8);
sData = 0;
}
return bytes;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}[/syntax]
-
siberprogs
- Сообщения: 93
- Зарегистрирован: 05 мар 2014, 06:20
Re: Простая запись Wave файлов.
У вас в телефоне диск C: есть?altwin писал(а):это что за путь?...String fileName = "C:\\test\\test.wave";
Linux Fedora RFRemix + Intellij Idea
Re: Простая запись Wave файлов.
Так это временно написал же (если это вообще работает))
Надо делать вроде через getExternalStorageDirectory() , пока не проверял работает или нет.
Надо делать вроде через getExternalStorageDirectory() , пока не проверял работает или нет.
-
siberprogs
- Сообщения: 93
- Зарегистрирован: 05 мар 2014, 06:20
Re: Простая запись Wave файлов.
Потому наверное и выкидывает - что пытается найти диск C: а не может.Nachinka писал(а):Накидал еще один прмерчик, он уже запускается, но при нажатии на кнопку старт, приложение вылетает, видимо ошибка в startRecording();
Linux Fedora RFRemix + Intellij Idea
Re: Простая запись Wave файлов.
Так тоже не работает:
[syntax=java]import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
boolean record = true;
File file;
private AudioRecord recorder = null;
private static final int sample_rate = 16000;
private static final int Mono = AudioFormat.CHANNEL_IN_MONO;
private static final int encoding = AudioFormat.ENCODING_PCM_16BIT;
private static final int BufferElements2Rec = 1024;
private static final int BytesPerElement = 2;
private static Thread recordingThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
start.setOnClickListener(this);
stop.setOnClickListener(this);
// file = new File(fileName);
Log.d(TAG, Environment.getExternalStorageDirectory().getAbsolutePath());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
Log.d(TAG, "record start");
startRecording();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
stopRecording();
}
}
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, sample_rate,
Mono, encoding, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
record = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void stopRecording() {
if (null != recorder) {
record = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
private void writeAudioDataToFile() {
short sData[] = new short[BufferElements2Rec];
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
Log.d(TAG, Environment.getExternalStorageDirectory().getAbsolutePath());
String fileName = "myFile.WAVE";
File f = new File(baseDir + File.separator + fileName);
FileOutputStream os = null;
try {
os = new FileOutputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (record) {
recorder.read(sData, 0, BufferElements2Rec);
try {
byte bData[] = short2byte(sData);
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData >> 8);
sData = 0;
}
return bytes;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}[/syntax]
[syntax=java]import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
Button start;
Button stop;
TextView out;
final String TAG = "Log";
boolean record = true;
File file;
private AudioRecord recorder = null;
private static final int sample_rate = 16000;
private static final int Mono = AudioFormat.CHANNEL_IN_MONO;
private static final int encoding = AudioFormat.ENCODING_PCM_16BIT;
private static final int BufferElements2Rec = 1024;
private static final int BytesPerElement = 2;
private static Thread recordingThread = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.StartB);
stop = (Button) findViewById(R.id.StopB);
out = (TextView) findViewById(R.id.textOut);
start.setOnClickListener(this);
stop.setOnClickListener(this);
// file = new File(fileName);
Log.d(TAG, Environment.getExternalStorageDirectory().getAbsolutePath());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.StartB:
Log.d(TAG, "record start");
startRecording();
case R.id.StopB:
record = false;
Log.d(TAG, "record stop");
stopRecording();
}
}
private void startRecording() {
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, sample_rate,
Mono, encoding, BufferElements2Rec * BytesPerElement);
recorder.startRecording();
record = true;
recordingThread = new Thread(new Runnable() {
public void run() {
writeAudioDataToFile();
}
}, "AudioRecorder Thread");
recordingThread.start();
}
private void stopRecording() {
if (null != recorder) {
record = false;
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
}
private void writeAudioDataToFile() {
short sData[] = new short[BufferElements2Rec];
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
Log.d(TAG, Environment.getExternalStorageDirectory().getAbsolutePath());
String fileName = "myFile.WAVE";
File f = new File(baseDir + File.separator + fileName);
FileOutputStream os = null;
try {
os = new FileOutputStream(f);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
while (record) {
recorder.read(sData, 0, BufferElements2Rec);
try {
byte bData[] = short2byte(sData);
os.write(bData, 0, BufferElements2Rec * BytesPerElement);
} catch (IOException e) {
e.printStackTrace();
}
}
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private byte[] short2byte(short[] sData) {
int shortArrsize = sData.length;
byte[] bytes = new byte[shortArrsize * 2];
for (int i = 0; i < shortArrsize; i++) {
bytes[i * 2] = (byte) (sData & 0x00FF);
bytes[(i * 2) + 1] = (byte) (sData >> 8);
sData = 0;
}
return bytes;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}[/syntax]
Re: Простая запись Wave файлов.
Кстати, правилно ли я поступаю? Что заношу информацию в файл? Она потом будет нужна для дальнейшего преобразования, так что..
Re: Простая запись Wave файлов.
Всем снова привет.
Все я мучаюсь с этим записывателем WAVE файлов.
Помогите, пожалуйста, решить проблемы в коде, если они есть..
Ибо чую я, что на эмуляторе в сд сторадж девайс просто не записать информацию.
Проект прикреплен.
Все я мучаюсь с этим записывателем WAVE файлов.
Помогите, пожалуйста, решить проблемы в коде, если они есть..
Ибо чую я, что на эмуляторе в сд сторадж девайс просто не записать информацию.
Проект прикреплен.
- Вложения
-
- SoundWrite.rar
- (1.18 МБ) 276 скачиваний
Re: Простая запись Wave файлов.
я думаю для запуска этого примера у тебя должен быть API >= 17Nachinka писал(а):Всем снова привет.
Все я мучаюсь с этим записывателем WAVE файлов.
Помогите, пожалуйста, решить проблемы в коде, если они есть..
Ибо чую я, что на эмуляторе в сд сторадж девайс просто не записать информацию.
Проект прикреплен.
[syntax=java5]03-20 19:09:43.478: W/EGL_emulation(1254): eglSurfaceAttrib not implemented
03-20 19:09:43.578: D/OpenGLRenderer(1254): Enabling debug mode 0
03-20 19:09:45.898: D/Log(1254): record start
03-20 19:09:55.158: D/Log(1254): record stop
03-20 19:09:55.206: D/Log(1254): File SIze: 200036
03-20 19:12:54.530: D/Log(1254): record start
03-20 19:13:00.138: D/Log(1254): record stop
03-20 19:13:00.210: D/Log(1254): File SIze: 130036
[/syntax]
«Life is too short to spend rewriting code»
Re: Простая запись Wave файлов.
Хм..Опять все только у меня не запускается, у меня при создании проекта вот такое окошко:
http://imgur.com/yXLO6Oo
А вот в SDK менеджере я вот такую вижу картину:
http://imgur.com/NFalmTh
http://imgur.com/yXLO6Oo
А вот в SDK менеджере я вот такую вижу картину:
http://imgur.com/NFalmTh
Re: Простая запись Wave файлов.
правильно, там же имя вписать надо)))Nachinka писал(а):Хм..Опять все только у меня не запускается, у меня при создании проекта вот такое окошко:
http://imgur.com/yXLO6Oo
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Простая запись Wave файлов.
Открой Android Virtual Device Manager, Создай эмулятор с API ни меньше 17 ти(не поленился запустил на эмуляторе с API 16 не запускается)Nachinka писал(а):Хм..Опять все только у меня не запускается, у меня при создании проекта вот такое окошко:
http://imgur.com/yXLO6Oo
А вот в SDK менеджере я вот такую вижу картину:
http://imgur.com/NFalmTh
P.S если код не запускается делись с ошибками, что выдает logcat
[syntax=java5]03-20 23:58:14.353: D/Log(1451): record start
03-20 23:58:14.363: E/AudioRecord(1451): Could not get audio input for record source 1
03-20 23:58:14.363: E/AudioRecord-JNI(1451): Error creating AudioRecord instance: initialization check failed.
03-20 23:58:14.363: E/AudioRecord-Java(1451): [ android.media.AudioRecord ] Error code -20 when initializing native AudioRecord object.
03-20 23:58:14.363: D/AndroidRuntime(1451): Shutting down VM
03-20 23:58:14.363: W/dalvikvm(1451): threadid=1: thread exiting with uncaught exception (group=0xb4f77288)
03-20 23:58:14.433: E/AndroidRuntime(1451): FATAL EXCEPTION: main
03-20 23:58:14.433: E/AndroidRuntime(1451): java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.media.AudioRecord.startRecording(AudioRecord.java:515)
03-20 23:58:14.433: E/AndroidRuntime(1451): at com.example.soundwrite.MainActivity.startRecording(MainActivity.java:83)
03-20 23:58:14.433: E/AndroidRuntime(1451): at com.example.soundwrite.MainActivity.onClick(MainActivity.java:67)
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.view.View.performClick(View.java:4084)
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.view.View$PerformClick.run(View.java:16966)
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.os.Handler.handleCallback(Handler.java:615)
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.os.Looper.loop(Looper.java:137)
03-20 23:58:14.433: E/AndroidRuntime(1451): at android.app.ActivityThread.main(ActivityThread.java:4745)
03-20 23:58:14.433: E/AndroidRuntime(1451): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 23:58:14.433: E/AndroidRuntime(1451): at java.lang.reflect.Method.invoke(Method.java:511)
03-20 23:58:14.433: E/AndroidRuntime(1451): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-20 23:58:14.433: E/AndroidRuntime(1451): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-20 23:58:14.433: E/AndroidRuntime(1451): at dalvik.system.NativeStart.main(Native Method)
[/syntax]
«Life is too short to spend rewriting code»
Re: Простая запись Wave файлов.
Вот на таком эмуляторе запускаю:
http://imgur.com/GsfUJ4u
Не запускается..
Прикрепил лог с ошибками.
http://imgur.com/GsfUJ4u
Не запускается..
Прикрепил лог с ошибками.
- Вложения
-
- log.rar
- (805 байт) 256 скачиваний
Re: Простая запись Wave файлов.
привыкайте архивировать в zip... в жизни программиста пригодитсяNachinka писал(а):Вот на таком эмуляторе запускаю:
http://imgur.com/GsfUJ4u
Не запускается..
Прикрепил лог с ошибками.

Re: Простая запись Wave файлов.
Спасибо! Возьму на заметку.
- Вложения
-
- log.zip
- Логи ошибки
- (854 байт) 248 скачиваний
-
- SoundWrite.zip
- Архив самого проекта
- (1.21 МБ) 254 скачивания
Re: Простая запись Wave файлов.
Нифига не пойму.. видать не поддерживает эмулятор аудиозахват..
http://imgur.com/ahsrwpO
Форумчане, хелп! Действительно эмулятор не поддерживает аудиозапись?
http://imgur.com/ahsrwpO
Форумчане, хелп! Действительно эмулятор не поддерживает аудиозапись?
Re: Простая запись Wave файлов.
Решил я все-таки вернутся к старому варианту, когда я записывал звук в массив байтов...В принципе файл-то не нужен.
Но что то тут не так, хотел объединить все в две кнопки(а потом и вообще в одну)
Но что то не получается, сам проект в принципе работает(вау!)), но что то не так.
Вот , кстати , и он:
Ни у кого нет мыслей по этому поводу?)
Хотя может тут ошибок то и нет... Но вот массив создается и, наверняка, завершается, до того как я нажму кнопку стоп.
Небольшие логи:
И почему то два раза написано стоп рекордер, хотя нажимаю то один раз...
Но что то тут не так, хотел объединить все в две кнопки(а потом и вообще в одну)
Но что то не получается, сам проект в принципе работает(вау!)), но что то не так.
Вот , кстати , и он:
Ни у кого нет мыслей по этому поводу?)
Хотя может тут ошибок то и нет... Но вот массив создается и, наверняка, завершается, до того как я нажму кнопку стоп.
Небольшие логи:
Код: Выделить всё
03-23 15:48:51.028: D/TAG(782): minInternalBufferSize = 640, internalBufferSize = 2560, myBufferSize = 8192
03-23 15:48:52.928: D/TAG(782): record start
03-23 15:48:52.928: D/TAG(782): recording...
03-23 15:48:52.948: D/TAG(782): stop recorder
03-23 15:48:52.958: D/TAG(782): record stop!
03-23 15:48:53.018: D/TAG(782): readCount = 160, totalCount = 160
03-23 15:48:53.018: D/TAG(782): lenght: 8192
03-23 15:48:53.018: D/TAG(782): data1: 0
03-23 15:48:53.028: D/TAG(782): data2: 0
03-23 15:48:54.758: D/TAG(782): stop recorder
03-23 15:48:54.758: D/TAG(782): record stop!- Вложения
-
- AudioByte.zip
- (1.21 МБ) 209 скачиваний