Vâng, chỉ đơn giản là đây là yêu cầu của tôi ..Android MediaPlayer với AudioEffect: Bắt Lỗi (-22,0)
Tôi có một tập tin WAV, tôi muốn mở nó, thêm một số hiệu ứng, và vui chơi.
Tôi đang sử dụng MediaPlayer để phát tệp và PresetReverb để thêm một số hiệu ứng.
Đây là mã của tôi
public void playSound(){
String fullPath = MainActivity.this.filePath + "tmpaudio.wav";
final MediaPlayer player = new MediaPlayer();
player.setDataSource(this, Uri.parse(fullPath));
PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId());
pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
pReverb.setEnabled(true);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(1.0f);
//prepare for playback
player.prepare();
// Media prepared listener
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
//play
player.start();
}
});
}
Khi tôi chạy mã này, tôi nhận được một bản ghi trong logcat
05-02 12 (Không đăng nhập của tôi.): 02: 42,356: E/MediaPlayer (17250): Lỗi (-22,0)
Nhưng khi tôi nhận xét những dòng
PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId());
pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
pReverb.setEnabled(true);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(1.0f);
MediaPlayer đang phát tệp thành công. Vì vậy, không có gì sai với tập tin WAV của tôi.
Bị hơi thất vọng, tôi đã cố gắng EnvironmentalReverb, thay vì PresetReverb,
EnvironmentalReverb eReverb = new EnvironmentalReverb(1, player.getAudioSessionId());
eReverb.setDecayHFRatio((short) 1000);
eReverb.setDecayTime(10000);
eReverb.setDensity((short) 1000);
eReverb.setDiffusion((short) 1000);
eReverb.setReverbLevel((short) -1000);
eReverb.setEnabled(true);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(1.0f);
còn tôi đã cùng một lỗi (Error (-22,0)).
Vì vậy, hoặc tôi thiếu một cái gì đó rất rõ ràng, hoặc có một số vấn đề với các lớp học gia đình AudioEffect (trong tài liệu hoặc api chính nó). Có ai có thể làm sáng tỏ không?
EDIT: Tôi quên để thêm, khi tôi sửa lỗi mã lỗi được đăng nhập khi
player.start();
được thực thi. Tôi đã xóa các phần xử lý ngoại lệ trước khi đăng phân đoạn mã ở trên. Nhưng tôi tích cực, không có ngoại lệ bị bắt khi tôi thực hiện.
EDIT LẠI:
Từ this liên kết Tôi đã hiểu lỗi -22 là PVMFErrLicenseRequiredPreviewAvailable
/*
Error due to the lack of a valid license for the content. However
a preview is available.
*/
const PVMFStatus PVMFErrLicenseRequiredPreviewAvailable = (-22);
Tôi googled với PVMFErrLicenseRequiredPreviewAvailable, và tôi đã nhận this tài liệu. Và trên trang 87
14.10.5 Xem trước DRM Content mà không có một giấy phép hợp lệ sẵn
Một biến thể của kịch bản được đề cập trong mục 14.10.3 là trường hợp không có giấy phép hợp lệ cho phát lại đầy đủ một đoạn nội dung, nhưng ở đó nó có thể được xem trước. Kịch bản này có thể là cách phổ biến của nội dung phân phối ban đầu để người tiêu dùng có thể xem trước nội dung đó trước khi quyết định mua giấy phép đầy đủ.Trong trường hợp này, phương thức Init() sẽ trở lại với mã số PVMFErrLicenseRequiredPreviewAvailable, cho biết rằng giấy phép là bắt buộc để phát lại đầy đủ nhưng có sẵn bản xem trước. Để phát bản xem trước, ứng dụng phải xóa nguồn hiện tại rồi thêm lại với cờ được đặt trên nguồn dữ liệu cục bộ để chỉ ra chế độ xem trước .
Bây giờ các tệp WAV tôi đã phát được tạo bởi tôi bằng cách sử dụng công cụ SpeechToText trong SDK Android. Tôi không biết giấy phép nào đang giữ tôi chơi tệp này.
Xin chào Krishnabhadra tôi đã thử giải pháp của bạn nhưng trong thiết bị của tôi tôi đã không tìm thấy bất kỳ hiệu ứng echo. Bạn có thể xin vui lòng gửi cho tôi mã mẫu của bạn. Thanks trước. – Rojesh
Tôi gặp Lỗi (1, -22) trong trường hợp của mình. Đây có phải là vấn đề tương tự không? –