unify compressor: remove C++ duplicate audiocompressor, use lib/audio_compressor.c in chatgui
This commit is contained in:
1 parent
00afc5c80a
commit
1dac0b8c81
12 files changed
+66
-257
No files matched your search
@@ -28,15 +28,15 @@ void VoiceEncoder::setPreset(int preset) {
|
||||
|
||||
int VoiceEncoder::preset() { return s_preset; }
|
||||
|
||||
int VoiceEncoder::encodeToFile(const std::vector<int16_t>& pcm, int sampleRate, int channels,
|
||||
int VoiceEncoder::encodeToFile(const int16_t* pcm, size_t pcmCount, int sampleRate, int channels,
|
||||
const QString& filePath, float& outDurationSec) {
|
||||
if (pcm.empty() || sampleRate <= 0 || channels <= 0) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_DEBUG, "VoiceEncoder: invalid input (pcm=%zu rate=%d ch=%d)", pcm.size(), sampleRate, channels);
|
||||
if (!pcm || pcmCount == 0 || sampleRate <= 0 || channels <= 0) {
|
||||
DEBUG_WARN(DEBUG_CATEGORY_DEBUG, "VoiceEncoder: invalid input (pcm=%zu rate=%d ch=%d)", pcmCount, sampleRate, channels);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int frameSamples = sampleRate * FRAME_MS / 1000;
|
||||
size_t totalSamples = pcm.size() / channels;
|
||||
size_t totalSamples = pcmCount / (size_t)channels;
|
||||
if (totalSamples < (size_t)frameSamples) return -1;
|
||||
|
||||
opus_codec_encoder_t* enc = opus_codec_encoder_create(sampleRate, channels);
|
||||
@@ -54,7 +54,7 @@ int VoiceEncoder::encodeToFile(const std::vector<int16_t>& pcm, int sampleRate,
|
||||
return -1;
|
||||
}
|
||||
DEBUG_DEBUG(DEBUG_CATEGORY_DEBUG, "VoiceEncoder::encodeToFile: writing to %s pcm=%zu samples preset=%d",
|
||||
qPrintable(filePath), pcm.size(), s_preset);
|
||||
qPrintable(filePath), pcmCount, s_preset);
|
||||
|
||||
/* write header */
|
||||
uint32_t magic = OPUS_MAGIC;
|
||||
@@ -68,11 +68,10 @@ int VoiceEncoder::encodeToFile(const std::vector<int16_t>& pcm, int sampleRate,
|
||||
|
||||
int frameCount = 0;
|
||||
uint8_t packet[MAX_PACKET];
|
||||
const int16_t* pcmData = pcm.data();
|
||||
size_t pcmOff = 0;
|
||||
|
||||
while (pcmOff + (size_t)frameSamples * channels <= totalSamples) {
|
||||
int len = opus_codec_encode(enc, pcmData + pcmOff, frameSamples, packet, MAX_PACKET);
|
||||
int len = opus_codec_encode(enc, pcm + pcmOff, frameSamples, packet, MAX_PACKET);
|
||||
pcmOff += (size_t)frameSamples * channels;
|
||||
|
||||
if (len > 0) {
|
||||
|
||||
Reference in new issue
Block a user