cuốn sách gpt4 ai đã làm

android - 如何在android中连续录制后台音频/语音?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 21:20:47 30 4
mua khóa gpt4 Nike

Vì muốn ghi âm ở chế độ nền nên tôi đã sử dụng một dịch vụ.. nhưng tôi không thể ghi âm trong dịch vụ đó.

Tôi đã thử mã tương tự trong Hoạt động và nó đã hoạt động với tôi. Nhưng làm cách nào tôi có thể ghi âm ở chế độ nền trong khi nhập giọng nói/giọng nói, nghĩa là nếu có đầu vào bằng giọng nói thì quá trình ghi âm sẽ bắt đầu và ở chế độ nền...?

câu trả lời hay nhất

Trong một trong các dự án của mình, tôi cần ghi lại âm thanh từ micrô liên tục. Tôi không thể chia sẻ dự án nhưng tôi có thể chia sẻ lớp AudioRecorder cụ thể.

nhập java.io.File;
import java.io.IOException;
nhập java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
nhập android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
nhập android.media.MediaRecorder;
import android.util.Log;

lớp công khai AudioRecorder {
bang enum công khai {
KHỞI TẠO,
SẴN SÀNG,
GHI ÂM,
LỖI,
ĐÃ DỪNG
};
byte riêng tư[] audioBuffer = null;
nguồn int riêng = MediaRecorder.AudioSource.MIC;
mẫu int riêngRate = 0;
bộ mã hóa int riêng = 0;
int riêng nChannels = 0;
bộ đệm int riêngRead = 0;
bộ đệm int riêngSize = 0;
riêng tư RandomAccessFile tempAudioFile = null;
public AudioRecord audioRecorder = null;
nhà nước tư nhân;
bSamples ngắn riêng tư = 16;
int framePeriod riêng tư;

// Khoảng thời gian mà các mẫu đã ghi được xuất ra tệp
// Chỉ được sử dụng ở chế độ không nén
riêng tư tĩnh cuối cùng TIMER_INTERVAL = 120;
Chủ đề dễ bay hơi t = null;
public int TimeStamp = 0, count = 0, preTimeStamp = 0;

Public AudioRecorder(Ngữ cảnh c) {
this.sampleRate = 11025;
this.encode = AudioFormat.ENCODING_PCM_16BIT;
this.nChannels = AudioFormat.CHANNEL_CONFIGUration_MONO;
this.preTimeStamp = (int) System.currentTimeMillis();
myApp = (MyApp) c.getApplicationContext();
mQueue = myApp.getQueue();

thử {
/*
Chuỗi fileName = "/sdcard/XYZ/11025.wav";
tempAudioFile = new RandomAccessFile(fileName,"rw");
*/

framePeriod = sampleRate * TIMER_INTERVAL / 1000;
bufferSize = framePeriod * 2 * bSamples * nChannels / 8;

if (bufferSize < AudioRecord.getMinBufferSize(sampleRate, nChannels, bộ mã hóa)) {
bufferSize = AudioRecord.getMinBufferSize(sampleRate, nChannels, bộ mã hóa);

// Đặt khoảng thời gian khung và khoảng thời gian hẹn giờ tương ứng
framePeriod = bufferSize / (2 * bSamples * nChannels / 8);
Log.w(AudioRecorder.class.getName(), "Tăng kích thước bộ đệm lên " + Integer.toString(bufferSize));
}

audioRecorder = new AudioRecord(source, sampleRate, nChannels, bộ mã hóa, bufferSize);
audioBuffer = byte mới [2048];
audioRecorder.setRecordPositionUpdateListener(updateListener);
audioRecorder.setPositionNotificationPeriod(framePeriod);
} bắt (Ngoại lệ cũ) {
ex.printStackTrace();
}
}

riêng AudioRecord.OnRecordPositionUpdateListener updateListener = new AudioRecord.OnRecordPositionUpdateListener() {
@Ghi đè
public void onPeriodicNotification(Máy ghi âm AudioRecord) {
// Log.d(Constant.APP_LOG,"Vào thông báo định kỳ...");
}
bắt (IOException e) {
// TODO Khối bắt được tạo tự động
e.printStackTrace();
}
*/
}

@Ghi đè
public void onMarkerReached(Máy ghi âm AudioRecord) {
// TODO sơ khai phương thức được tạo tự động
}
};

bắt đầu khoảng trống công khai () {
if (state == State.INITIALIZING) {
audioRecorder.startRecording();
trạng thái = Trạng thái.RECORDING;

t = Chủ đề mới() {
công khai void run() {
// Tại đây Bạn có thể đọc Bộ đệm âm thanh của mình
audioRecorder.read(audioBuffer, 0, 2048);
}
};

t.setPriority(Thread.MAX_PRIORITY);
t.start();
} khác {
Log.e(AudioRecorder.class.getName(), "start() được gọi ở trạng thái bất hợp pháp");
trạng thái = Trạng thái.ERROR;
}
}

dừng trống công khai () {
if (state == State.RECORDING) {
audioRecorder.stop();
Chủ đề t1 = t;
t = rỗng;
t1.interrupt();
đếm = 0;
trạng thái = Trạng thái.STOPPED;
} khác {
Log.e(AudioRecorder.class.getName(), "stop() được gọi ở trạng thái bất hợp pháp");
trạng thái = Trạng thái.ERROR;
}
}

phát hành khoảng trống công khai () {
if (state == State.RECORDING) {
dừng lại();
}

if (audioRecorder != null) {
audioRecorder.release();
}
}

thiết lập lại khoảng trống công khai () {
thử {
if (state != State.ERROR) {
giải phóng();
}
} catch (Exception e) {
Log.e(AudioRecorder.class.getName(), e.getMessage());

trạng thái = Trạng thái.ERROR;
}
}

Trạng thái công khai getState() {
return state;
}
}

Bây giờ, hãy tạo dịch vụ và gọi phương thức start() cũng như thao tác với bộ đệm âm thanh đã ghi theo mục đích của bạn.

Hy vọng điều này sẽ giúp.

Giới thiệu về android - Làm cách nào để ghi âm thanh/giọng nói nền liên tục trong android? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/10025824/

30 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress