Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
xuning
/
sherpaonnx
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
mtdxc
2025-05-31 21:48:41 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Committed by
GitHub
2025-05-31 21:48:41 +0800
Commit
613e8084c2d1df13606e3131554b0a79a1f72172
613e8084
1 parent
921f0f40
move portaudio common record code to microphone (#2264)
Co-authored-by: cqm <cqm@97kid.com>
显示空白字符变更
内嵌
并排对比
正在显示
12 个修改的文件
包含
130 行增加
和
446 行删除
cxx-api-examples/parakeet-tdt-simulate-streaming-microphone-cxx-api.cc
cxx-api-examples/sense-voice-simulate-streaming-microphone-cxx-api.cc
sherpa-onnx/csrc/microphone.cc
sherpa-onnx/csrc/microphone.h
sherpa-onnx/csrc/sherpa-onnx-alsa-offline-speaker-identification.cc
sherpa-onnx/csrc/sherpa-onnx-keyword-spotter-microphone.cc
sherpa-onnx/csrc/sherpa-onnx-microphone-offline-audio-tagging.cc
sherpa-onnx/csrc/sherpa-onnx-microphone-offline-speaker-identification.cc
sherpa-onnx/csrc/sherpa-onnx-microphone-offline.cc
sherpa-onnx/csrc/sherpa-onnx-microphone.cc
sherpa-onnx/csrc/sherpa-onnx-vad-microphone-offline-asr.cc
sherpa-onnx/csrc/sherpa-onnx-vad-microphone.cc
cxx-api-examples/parakeet-tdt-simulate-streaming-microphone-cxx-api.cc
查看文件 @
613e808
...
...
@@ -116,7 +116,6 @@ int32_t main() {
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
std
::
cout
<<
"Num devices: "
<<
num_devices
<<
"
\n
"
;
if
(
num_devices
==
0
)
{
std
::
cerr
<<
" If you are using Linux, please try "
"./build/bin/sense-voice-simulate-streaming-alsa-cxx-api
\n
"
;
...
...
@@ -124,39 +123,24 @@ int32_t main() {
}
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
const
char
*
pDeviceIndex
=
std
::
getenv
(
"SHERPA_ONNX_MIC_DEVICE"
);
if
(
pDeviceIndex
)
{
fprintf
(
stderr
,
"Use specified device: %s
\n
"
,
pDeviceIndex
);
device_index
=
atoi
(
pDeviceIndex
);
}
mic
.
PrintDevices
(
device_index
);
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
sample_rate_str
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
sample_rate_str
)
{
fprintf
(
stderr
,
"Use sample rate %f for mic
\n
"
,
mic_sample_rate
);
mic_sample_rate
=
atof
(
sample_rate_str
);
}
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
)
==
false
)
{
std
::
cerr
<<
"Failed to open microphone device
\n
"
;
return
-
1
;
}
float
sample_rate
=
16000
;
LinearResampler
resampler
;
if
(
mic_sample_rate
!=
sample_rate
)
{
...
...
@@ -168,27 +152,6 @@ int32_t main() {
lowpass_cutoff
,
lowpass_filter_width
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
// RecordCallback is run in a separate
// thread created by portaudio
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
int32_t
window_size
=
512
;
// samples, please don't change
int32_t
offset
=
0
;
...
...
@@ -276,11 +239,5 @@ int32_t main() {
}
}
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
cxx-api-examples/sense-voice-simulate-streaming-microphone-cxx-api.cc
查看文件 @
613e808
...
...
@@ -112,7 +112,6 @@ int32_t main() {
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
std
::
cout
<<
"Num devices: "
<<
num_devices
<<
"
\n
"
;
if
(
num_devices
==
0
)
{
std
::
cerr
<<
" If you are using Linux, please try "
"./build/bin/sense-voice-simulate-streaming-alsa-cxx-api
\n
"
;
...
...
@@ -120,33 +119,13 @@ int32_t main() {
}
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
const
char
*
pDeviceIndex
=
std
::
getenv
(
"SHERPA_ONNX_MIC_DEVICE"
);
if
(
pDeviceIndex
)
{
fprintf
(
stderr
,
"Use specified device: %s
\n
"
,
pDeviceIndex
);
device_index
=
atoi
(
pDeviceIndex
);
}
mic
.
PrintDevices
(
device_index
);
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
sample_rate_str
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
sample_rate_str
)
{
...
...
@@ -163,26 +142,10 @@ int32_t main() {
resampler
=
LinearResampler
::
Create
(
mic_sample_rate
,
sample_rate
,
lowpass_cutoff
,
lowpass_filter_width
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
// RecordCallback is run in a separate
// thread created by portaudio
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
if
(
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
)
==
false
)
{
std
::
cerr
<<
"Failed to open microphone device
\n
"
;
return
-
1
;
}
int32_t
window_size
=
512
;
// samples, please don't change
...
...
@@ -272,11 +235,5 @@ int32_t main() {
}
}
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/microphone.cc
查看文件 @
613e808
...
...
@@ -7,8 +7,6 @@
#include <stdio.h>
#include <stdlib.h>
#include "portaudio.h" // NOLINT
namespace
sherpa_onnx
{
Microphone
::
Microphone
()
{
...
...
@@ -20,10 +18,85 @@ Microphone::Microphone() {
}
Microphone
::~
Microphone
()
{
CloseDevice
();
PaError
err
=
Pa_Terminate
();
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
-
1
);
}
}
int
Microphone
::
GetDeviceCount
()
const
{
return
Pa_GetDeviceCount
();
}
int
Microphone
::
GetDefaultInputDevice
()
const
{
return
Pa_GetDefaultInputDevice
();
}
void
Microphone
::
PrintDevices
(
int
device_index
)
const
{
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
}
bool
Microphone
::
OpenDevice
(
int
index
,
int
sample_rate
,
int
channel
,
PaStreamCallback
cb
,
void
*
userdata
)
{
if
(
index
<
0
||
index
>=
Pa_GetDeviceCount
())
{
fprintf
(
stderr
,
"Invalid device index: %d
\n
"
,
index
);
return
false
;
}
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
index
);
if
(
!
info
)
{
fprintf
(
stderr
,
"No device info found for index: %d
\n
"
,
index
);
return
false
;
}
CloseDevice
();
fprintf
(
stderr
,
"Use device: %d
\n
"
,
index
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
PaStreamParameters
param
;
param
.
device
=
index
;
param
.
channelCount
=
channel
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
cb
,
userdata
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
return
false
;
}
err
=
Pa_StartStream
(
stream
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
CloseDevice
();
return
false
;
}
return
true
;
}
void
Microphone
::
CloseDevice
()
{
if
(
stream
)
{
PaError
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"Pa_CloseStream error: %s
\n
"
,
Pa_GetErrorText
(
err
));
}
stream
=
nullptr
;
}
}
...
...
sherpa-onnx/csrc/microphone.h
查看文件 @
613e808
...
...
@@ -4,13 +4,22 @@
#ifndef SHERPA_ONNX_CSRC_MICROPHONE_H_
#define SHERPA_ONNX_CSRC_MICROPHONE_H_
#include "portaudio.h" // NOLINT
namespace
sherpa_onnx
{
class
Microphone
{
PaStream
*
stream
=
nullptr
;
public
:
Microphone
();
~
Microphone
();
int
GetDeviceCount
()
const
;
int
GetDefaultInputDevice
()
const
;
void
PrintDevices
(
int
sel
)
const
;
bool
OpenDevice
(
int
index
,
int
sample_rate
,
int
channel
,
PaStreamCallback
cb
,
void
*
userdata
);
void
CloseDevice
();
};
}
// namespace sherpa_onnx
...
...
sherpa-onnx/csrc/sherpa-onnx-alsa-offline-speaker-identification.cc
查看文件 @
613e808
...
...
@@ -14,7 +14,6 @@
#include "sherpa-onnx/csrc/alsa.h"
#include "sherpa-onnx/csrc/macros.h"
#include "sherpa-onnx/csrc/microphone.h"
#include "sherpa-onnx/csrc/speaker-embedding-extractor.h"
#include "sherpa-onnx/csrc/speaker-embedding-manager.h"
#include "sherpa-onnx/csrc/wave-reader.h"
...
...
sherpa-onnx/csrc/sherpa-onnx-keyword-spotter-microphone.cc
查看文件 @
613e808
...
...
@@ -79,11 +79,7 @@ for a list of pre-trained models to download.
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
fprintf
(
stderr
,
"If you are using Linux, please switch to
\n
"
);
...
...
@@ -97,26 +93,7 @@ for a list of pre-trained models to download.
device_index
=
atoi
(
pDeviceIndex
);
}
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
mic
.
PrintDevices
(
device_index
);
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
...
...
@@ -124,24 +101,9 @@ for a list of pre-trained models to download.
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
s
.
get
());
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
s
.
get
()))
{
fprintf
(
stderr
,
"portaudio error: %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -164,11 +126,5 @@ for a list of pre-trained models to download.
Pa_Sleep
(
20
);
// sleep for 20ms
}
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/sherpa-onnx-microphone-offline-audio-tagging.cc
查看文件 @
613e808
...
...
@@ -120,11 +120,7 @@ for more models.
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
fprintf
(
stderr
,
"If you are using Linux, please switch to
\n
"
);
...
...
@@ -138,26 +134,7 @@ for more models.
device_index
=
atoi
(
pDeviceIndex
);
}
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
mic
.
PrintDevices
(
device_index
);
float
mic_sample_rate
=
16000
;
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
...
...
@@ -165,24 +142,9 @@ for more models.
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
/* user_data */
)){
fprintf
(
stderr
,
"portaudio error: %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -226,11 +188,5 @@ for more models.
}
t
.
join
();
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/sherpa-onnx-microphone-offline-speaker-identification.cc
查看文件 @
613e808
...
...
@@ -220,9 +220,6 @@ Note that `zh` means Chinese, while `en` means English.
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
...
...
@@ -238,52 +235,18 @@ Note that `zh` means Chinese, while `en` means English.
device_index
=
atoi
(
pDeviceIndex
);
}
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
mic
.
PrintDevices
(
device_index
);
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
fprintf
(
stderr
,
"Use sample rate %f for mic
\n
"
,
mic_sample_rate
);
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
float
sample_rate
=
16000
;
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
/* user_data */
)){
fprintf
(
stderr
,
"portaudio error: %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -323,11 +286,5 @@ Note that `zh` means Chinese, while `en` means English.
}
t
.
join
();
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/sherpa-onnx-microphone-offline.cc
查看文件 @
613e808
...
...
@@ -136,11 +136,7 @@ for a list of pre-trained models to download.
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
fprintf
(
stderr
,
"If you are using Linux, please switch to
\n
"
);
...
...
@@ -154,26 +150,8 @@ for a list of pre-trained models to download.
device_index
=
atoi
(
pDeviceIndex
);
}
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
mic
.
PrintDevices
(
device_index
);
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
...
...
@@ -181,24 +159,9 @@ for a list of pre-trained models to download.
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
/* user_data */
)){
fprintf
(
stderr
,
"portaudio error: %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -232,11 +195,5 @@ for a list of pre-trained models to download.
}
t
.
join
();
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/sherpa-onnx-microphone.cc
查看文件 @
613e808
...
...
@@ -106,11 +106,7 @@ for a list of pre-trained models to download.
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
fprintf
(
stderr
,
"If you are using Linux, please switch to
\n
"
);
...
...
@@ -124,51 +120,18 @@ for a list of pre-trained models to download.
device_index
=
atoi
(
pDeviceIndex
);
}
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
mic
.
PrintDevices
(
device_index
);
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
fprintf
(
stderr
,
"Use sample rate %f for mic
\n
"
,
mic_sample_rate
);
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
float
sample_rate
=
16000
;
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
s
.
get
());
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
/* user_data */
)){
fprintf
(
stderr
,
"portaudio error: %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
...
...
@@ -213,11 +176,5 @@ for a list of pre-trained models to download.
Pa_Sleep
(
20
);
// sleep for 20ms
}
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/sherpa-onnx-vad-microphone-offline-asr.cc
查看文件 @
613e808
...
...
@@ -113,17 +113,7 @@ to download models for offline ASR.
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
if
(
num_devices
==
0
)
{
fprintf
(
stderr
,
" If you are using Linux, please try "
"./build/bin/sherpa-onnx-vad-alsa-offline-asr
\n
"
);
exit
(
-
1
);
}
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
fprintf
(
stderr
,
...
...
@@ -137,33 +127,20 @@ to download models for offline ASR.
fprintf
(
stderr
,
"Use specified device: %s
\n
"
,
pDeviceIndex
);
device_index
=
atoi
(
pDeviceIndex
);
}
mic
.
PrintDevices
(
device_index
);
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
fprintf
(
stderr
,
"Use sample rate %f for mic
\n
"
,
mic_sample_rate
);
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
))
{
fprintf
(
stderr
,
"Failed to open device %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
float
sample_rate
=
16000
;
std
::
unique_ptr
<
sherpa_onnx
::
LinearResample
>
resampler
;
if
(
mic_sample_rate
!=
sample_rate
)
{
...
...
@@ -175,25 +152,6 @@ to download models for offline ASR.
mic_sample_rate
,
sample_rate
,
lowpass_cutoff
,
lowpass_filter_width
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
auto
vad
=
std
::
make_unique
<
sherpa_onnx
::
VoiceActivityDetector
>
(
vad_config
);
fprintf
(
stderr
,
"Started. Please speak
\n
"
);
...
...
@@ -236,11 +194,5 @@ to download models for offline ASR.
Pa_Sleep
(
100
);
// sleep for 100ms
}
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
sherpa-onnx/csrc/sherpa-onnx-vad-microphone.cc
查看文件 @
613e808
...
...
@@ -74,11 +74,8 @@ wget https://github.com/snakers4/silero-vad/raw/master/src/silero_vad/data/siler
sherpa_onnx
::
Microphone
mic
;
PaDeviceIndex
num_devices
=
Pa_GetDeviceCount
();
fprintf
(
stderr
,
"Num devices: %d
\n
"
,
num_devices
);
int32_t
device_index
=
Pa_GetDefaultInputDevice
();
if
(
device_index
==
paNoDevice
)
{
fprintf
(
stderr
,
"No default input device found
\n
"
);
fprintf
(
stderr
,
"If you are using Linux, please switch to
\n
"
);
...
...
@@ -91,35 +88,20 @@ wget https://github.com/snakers4/silero-vad/raw/master/src/silero_vad/data/siler
fprintf
(
stderr
,
"Use specified device: %s
\n
"
,
pDeviceIndex
);
device_index
=
atoi
(
pDeviceIndex
);
}
mic
.
PrintDevices
(
device_index
);
for
(
int32_t
i
=
0
;
i
!=
num_devices
;
++
i
)
{
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
i
);
fprintf
(
stderr
,
" %s %d %s
\n
"
,
(
i
==
device_index
)
?
"*"
:
" "
,
i
,
info
->
name
);
}
PaStreamParameters
param
;
param
.
device
=
device_index
;
fprintf
(
stderr
,
"Use device: %d
\n
"
,
param
.
device
);
const
PaDeviceInfo
*
info
=
Pa_GetDeviceInfo
(
param
.
device
);
fprintf
(
stderr
,
" Name: %s
\n
"
,
info
->
name
);
fprintf
(
stderr
,
" Max input channels: %d
\n
"
,
info
->
maxInputChannels
);
param
.
channelCount
=
1
;
param
.
sampleFormat
=
paFloat32
;
param
.
suggestedLatency
=
info
->
defaultLowInputLatency
;
param
.
hostApiSpecificStreamInfo
=
nullptr
;
float
mic_sample_rate
=
16000
;
const
char
*
pSampleRateStr
=
std
::
getenv
(
"SHERPA_ONNX_MIC_SAMPLE_RATE"
);
if
(
pSampleRateStr
)
{
fprintf
(
stderr
,
"Use sample rate %f for mic
\n
"
,
mic_sample_rate
);
mic_sample_rate
=
atof
(
pSampleRateStr
);
}
float
sample_rate
=
16000
;
if
(
!
mic
.
OpenDevice
(
device_index
,
mic_sample_rate
,
1
,
RecordCallback
,
nullptr
))
{
fprintf
(
stderr
,
"Failed to open microphone device %d
\n
"
,
device_index
);
exit
(
EXIT_FAILURE
);
}
float
sample_rate
=
16000
;
std
::
unique_ptr
<
sherpa_onnx
::
LinearResample
>
resampler
;
if
(
mic_sample_rate
!=
sample_rate
)
{
float
min_freq
=
std
::
min
(
mic_sample_rate
,
sample_rate
);
...
...
@@ -130,30 +112,8 @@ wget https://github.com/snakers4/silero-vad/raw/master/src/silero_vad/data/siler
mic_sample_rate
,
sample_rate
,
lowpass_cutoff
,
lowpass_filter_width
);
}
PaStream
*
stream
;
PaError
err
=
Pa_OpenStream
(
&
stream
,
&
param
,
nullptr
,
/* &outputParameters, */
mic_sample_rate
,
0
,
// frames per buffer
paClipOff
,
// we won't output out of range samples
// so don't bother clipping them
RecordCallback
,
nullptr
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
err
=
Pa_StartStream
(
stream
);
auto
vad
=
std
::
make_unique
<
sherpa_onnx
::
VoiceActivityDetector
>
(
config
);
fprintf
(
stderr
,
"Started
\n
"
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
int32_t
window_size
=
config
.
silero_vad
.
window_size
;
bool
printed
=
false
;
...
...
@@ -202,11 +162,5 @@ wget https://github.com/snakers4/silero-vad/raw/master/src/silero_vad/data/siler
Pa_Sleep
(
100
);
// sleep for 100ms
}
err
=
Pa_CloseStream
(
stream
);
if
(
err
!=
paNoError
)
{
fprintf
(
stderr
,
"portaudio error: %s
\n
"
,
Pa_GetErrorText
(
err
));
exit
(
EXIT_FAILURE
);
}
return
0
;
}
...
...
请
注册
或
登录
后发表评论