OP25 OP25 - DMR and Raspberry Pi 3

Status
Not open for further replies.

miclass

Member
Joined
Dec 27, 2020
Messages
21
I am searching for some hints on how to get working OP25 (Boatbod version - downloaded from git a couple of weeks ago) on a Raspberry Pi 3 running Raspbian Buster. The signal is received using a common RTL2838 usb key.

My goal is to decode a DMR unencrypted signal on the Raspberry and play the audio using the analog output. I have no doubts about the frequency of the signal and the possibility to decode it because I have been able to get it working on a common pc using gqrx and DSD+ on wine.

Logging the execution of multi_rx.py something seems to get decoded correctly, for example I can find rows like these:

Code:
12/27/20 18:29:23.138410 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/27/20 18:29:23.138436 [-1] Slot(1), CC(7), IDLE
12/27/20 18:29:23.204433 [-1] Slot(0), CC(7), Data Type=9, gly_errs=0
12/27/20 18:29:23.204602 [-1] Slot(0), CC(7), IDLE
12/27/20 18:29:23.232538 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/27/20 18:29:23.232713 [-1] Slot(1), CC(7), IDLE
12/27/20 18:29:23.309000 [-1] Slot(0), CC(7), Data Type=9, gly_errs=0
12/27/20 18:29:23.309155 [-1] Slot(0), CC(7), IDLE
12/27/20 18:29:23.326471 [-1] SLCO=0x0, NULL MSG
12/27/20 18:29:23.326668 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/27/20 18:29:23.326719 [-1] Slot(1), CC(7), IDLE
12/27/20 18:29:23.342941 [-1] Slot(0), CC(7), Data Type=9, gly_errs=0
12/27/20 18:29:23.343141 [-1] Slot(0), CC(7), IDLE
O12/27/20 18:29:23.512014 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0

and some line with voice data:
Code:
12/27/20 20:43:41.548739 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/27/20 20:43:41.548904 [-1] Slot(1), CC(7), IDLE
12/27/20 20:43:41.560564 [-1] Slot(0), CC(7), PI(0), EMB lcss(1), qr_errs=0
12/27/20 20:43:41.560751 [-1] Slot(0), CC(7), BS VOICE
12/27/20 20:43:41.560812 [-1] AMBE 55 34 40 90 68 db 80 errs 0 err_rate 0.000000
12/27/20 20:43:41.560902 [-1] AMBE b8 21 a0 b9 2b f0 80 errs 0 err_rate 0.000000
12/27/20 20:43:41.560956 [-1] AMBE c8 21 88 f8 aa f1 00 errs 0 err_rate 0.000000
O12/27/20 20:43:41.638785 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/27/20 20:43:41.638938 [-1] Slot(1), CC(7), IDLE
12/27/20 20:43:41.662326 [-1] Slot(0), CC(7), BS VOICE
12/27/20 20:43:41.662520 [-1] AMBE 8c 28 6e 40 ca 11 80 errs 6 err_rate 0.006384
12/27/20 20:43:41.662607 [-1] AMBE c6 1b 4a 41 02 12 80 errs 7 err_rate 0.013513
12/27/20 20:43:41.662685 [-1] AMBE 82 0d 25 85 c9 75 00 errs 8 err_rate 0.021349

The problem is that I don't hear anything and I have some doubts on how to configure it correctly.

So far I understood that (please correct me if I am wrong):
  • to decode DMR I must use multi_rx.py, because rx.py works only for OP25
  • multi_rx.py does not support the '-U' to enable built-in udp audio player, therefore some specific configuration has to be used in the json file

I tried with:
  • setting in the json file different "destination" in the "channels" section, for example
    • udp://127.0.0.1:56120 -> it didn't work. In the log I find the following line: op25_audio::eek:pen_socket(): enabled udp host(127.0.0.1), wireshark(56120), audio(56120) - that according to something I found in this forum is a wrong behavior, in fact nothing on port 56120 is listening
    • file://out1.raw -> I tried this just for curiosity, to check the output. Strangely it didn't work either, the file gets written but just few bytes while I was expecting something more after some VOICE received. By the way, how could I read the raw file once written?
  • using the "audio" section in the json file, with this content:
Code:
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "audio0",
                "device_name": "default",
                "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 1
            }
        ]
    }
In this case in pavucontrol a Python application appears as output, but again, no audio when VOICE is received.​
Could you help me with some hints? I don't want to stream the content, but just play it locally (possibly also save it as audio file). It's really not clear to me which is the correct way to configure OP25 in such a case (and in general with multi_rx.py), should I use "destination" in the "channels" section or the "audio" section? Is it better to use liquidsoap? (but I don't need to stream the audio on another pc...). Should multi_rx.py be used in conjunction with some other programs piping the audio to it? (aplay for example).

Your help will be greatly appreciated - Thank you.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
All the configuration can be done through the cfg.json file.
You are going to want to copy the "audio" section from the p25 example and paste that into your dmr cfg.json file, then when you start multi_rx.py it will start the audio decoder internally.

If you feel like PM'ing me your cfg.json file I'll take a look and see what needs to be done.
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
Thank you very much for your feedback!

This is my cfg.json:

Code:
{
    "channels": [
        {
            "device": "rtl_0",
            "demod_type": "fsk4",
            "destination": "",
            "excess_bw": 0.2,
            "filter_type": "rrc",
            "if_rate": 24000,
            "name": "DMR_TEST",
            "plot": "fft",
            "symbol_rate": 4800
        }
    ],
    "devices": [
        {
            "args": "rtl=0",
            "frequency": xxxxxxxxxx,
            "gains": "LNA:39",
            "name": "rtl_0",
            "offset": 0,
            "ppm": 0,
            "rate": 2048000,
            "tunable": true
        }
    ],
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "audio0",
                "device_name": "default",
                "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 1
            }
        ]
    }   
}

As you can see from the screenshot the udp ports get opened, and also python appears in the pavucontrol, anyway no audio is ever played. The output is set to "Audio internal Analog Stereo" (which is the audio jack I assume) but I cannot hear anything with headphones connected to it). Even if I change it to "Audio internal Digital Stereo" (which is the HDMI audio, I assume) I cannot hear anything from the TV screen the raspberry is connected to. In general the audio in the system works, I can hear sounds if I play a streaming radio via mplayer or if I pipe a radio with rtl_fm in aplay.

Thanks for the support.

2020-12-28-220253_1824x984_scrot.png
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
Your "channel" definition has a null destination entry. Change it to this:
Code:
"destination": "udp://127.0.0.1:23456",
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
Thank you - I modified as suggested but still no luck.

For example I get the following in the log:
Code:
12/29/20 09:52:35.010155 [-1] rx_sync::sync_reset:
12/29/20 09:52:35.022837 [-1] rx_sync::sync_established: protocol DMR
12/29/20 09:52:35.026170 [-1] Slot(0), CC(7), BS VOICE
12/29/20 09:52:35.026417 [-1] unmute channel(0)
12/29/20 09:52:35.026484 [-1] AMBE 88 0c 6b e8 0f 24 80 errs 0 err_rate 0.059603
12/29/20 09:52:35.026899 [-1] AMBE 39 06 b6 d7 fc 50 80 errs 0 err_rate 0.056623
12/29/20 09:52:35.027374 [-1] AMBE 78 0f 03 17 8d 4a 80 errs 0 err_rate 0.053791
12/29/20 09:52:35.041309 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/29/20 09:52:35.041422 [-1] Slot(1), CC(7), IDLE
12/29/20 09:52:35.053212 [-1] Slot(0), CC(7), PI(0), EMB lcss(1), qr_errs=0
12/29/20 09:52:35.053331 [-1] Slot(0), CC(7), BS VOICE
12/29/20 09:52:35.053366 [-1] AMBE a8 07 b8 bd 49 57 00 errs 0 err_rate 0.051102
12/29/20 09:52:35.053544 [-1] AMBE c8 09 a9 1d 89 8b 80 errs 0 err_rate 0.048547
12/29/20 09:52:35.053608 [-1] AMBE a8 1c fe d2 27 a9 00 errs 0 err_rate 0.046119
12/29/20 09:52:35.195735 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/29/20 09:52:35.195982 [-1] Slot(1), CC(7), IDLE
12/29/20 09:52:35.218306 [-1] Slot(0), CC(7), PI(0), EMB lcss(3), qr_errs=0
12/29/20 09:52:35.218618 [-1] Slot(0), CC(7), BS VOICE
12/29/20 09:52:35.218840 [-1] AMBE a8 0f 40 08 8a e5 80 errs 0 err_rate 0.043813
12/29/20 09:52:35.219318 [-1] AMBE 98 16 6a 86 27 75 80 errs 0 err_rate 0.041623
12/29/20 09:52:35.219678 [-1] AMBE 98 0b 16 73 ce bf 80 errs 0 err_rate 0.039542
O12/29/20 09:52:35.246826 [-1] Slot(1), CC(7), Data Type=9, gly_errs=0
12/29/20 09:52:35.246955 [-1] Slot(1), CC(7), IDLE
OOOOOOOOOO12/29/20 09:52:35.977609 [-1] Slot(0), CC(7), BS VOICE
12/29/20 09:52:35.977869 [-1] AMBE 93 7a 28 40 f3 c8 80 errs 7 err_rate 0.045013
12/29/20 09:52:35.978234 [-1] AMBE 87 50 08 65 5e 01 00 errs 7 err_rate 0.050210
12/29/20 09:52:35.978394 [-1] AMBE 88 a4 71 6c 87 01 80 errs 8 err_rate 0.056211
OOO12/29/20 09:52:36.208136 [-1] resync at count 110 for protocol DMR (expected count 90)
12/29/20 09:52:36.208320 [-1] rx_sync::sync_reset:
12/29/20 09:52:36.208569 [-1] mute channel(0)

But I don't hear anything unfortunately.
The python process appears in pavucontrol, anyway when some voice data is received the bar of the level of signal in pavucontrol does not move, as if it would not receive anything.

Another behaviour that I noticed: every time voice data is received the python process in pavucontrol disappears and appears again, it's just the time of the blink of an eye. Is it started again?

Any other suggestions?

Thank you very much.
 
Last edited:

miclass

Member
Joined
Dec 27, 2020
Messages
21
I am trying to do some troubleshooting and I tried with tcpdump to see if some traffic was going on port 23456, I get some results but very few packages for about 3 / 4 seconds of voice, for example:
Code:
18:02:56.280902 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.281169 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.281364 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.399498 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.399870 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.400060 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.417676 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 2
18:02:56.680401 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.680657 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.680815 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.801543 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.804345 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.804760 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 320
18:02:56.883194 IP 127.0.0.1.53920 > 127.0.0.1.23456: UDP, length 2
while in the multi_rx.py log i have:
Code:
12/29/20 18:02:56.280467 [-1] AMBE 65 4c 05 a8 03 32 80 errs 0 err_rate 0.086679
12/29/20 18:02:56.280965 [-1] AMBE 88 3d 85 28 ce 42 80 errs 0 err_rate 0.082345
12/29/20 18:02:56.281209 [-1] AMBE c8 20 a5 e9 88 41 00 errs 0 err_rate 0.078228
O12/29/20 18:02:56.399126 [-1] AMBE 67 3a 16 b2 1c 94 00 errs 0 err_rate 0.074317
12/29/20 18:02:56.399566 [-1] AMBE 66 da 15 4f 7b 07 00 errs 0 err_rate 0.070601
12/29/20 18:02:56.399912 [-1] AMBE 68 08 74 a5 a0 35 00 errs 5 err_rate 0.072391
O12/29/20 18:02:56.679955 [-1] AMBE 60 cd 91 a8 1c bf 00 errs 0 err_rate 0.068771
12/29/20 18:02:56.680454 [-1] AMBE 62 ae 00 6c 6e 39 00 errs 0 err_rate 0.065333
12/29/20 18:02:56.680688 [-1] AMBE 76 a6 90 5e 49 b5 00 errs 0 err_rate 0.062066
OO12/29/20 18:02:56.800677 [-1] AMBE 1b 06 b4 38 17 94 00 errs 6 err_rate 0.065347
12/29/20 18:02:56.804041 [-1] AMBE f0 66 63 f5 c9 c6 00 errs 6 err_rate 0.068463
12/29/20 18:02:56.804577 [-1] AMBE b1 77 d0 ec 3c 91 80 errs 6 err_rate 0.071424

Is it a normal behaviour? (still don't hear anything)

Additionally, this is the beginning of my log (-v 9):
Code:
Configuring audio instance #0 [audio0]
using ALSA sound system
audio device: default
Listening on 127.0.0.1:23456
device: {u'gains': u'LNA:39', u'args': u'rtl=0', u'tunable': True, u'rate': 2048000, u'frequency': 460555000, u'ppm': 0, u'offset': 0, u'name': u'rtl_0'}
Device name: "rtl_0", osmosdr args: "rtl=0"
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.13.4
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
[R82XX] PLL not locked!
channel (dev rtl_0): {u'plot': u'fft', u'name': u'CC', u'excess_bw': 0.2, u'symbol_rate': 4800, u'destination': u'udp://127.0.0.1:23456', u'demod_type': u'fsk4', u'filter_type': u'rrc', u'device': u'rtl_0',
 u'if_rate': 24000}
Using two-stage decimator for speed=2048000, decim=16/4 if1=128000 if2=32000
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
12/29/20 17:37:51.357972 [-1] Enabling nbfm analog audio
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
python version detected: 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0]
Allocating 15 zero-copy buffers

Hope it helps to better understand what's going on.

Thank you.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
The log shows that the audio player is starting and monitoring for traffic at 27.0.0.1:23456
Code:
Configuring audio instance #0 [audio0]
using ALSA sound system
audio device: default
Listening on 127.0.0.1:23456

I also see the channel destination set to 127.0.0.1:23456
Code:
channel (dev rtl_0): {u'plot': u'fft', u'name': u'CC', u'excess_bw': 0.2, u'symbol_rate': 4800, u'destination': u'udp://127.0.0.1:23456', u'demod_type': u'fsk4', u'filter_type': u'rrc', u'device': u'rtl_0',
 u'if_rate': 24000}

Your tcpdump appears to be capturing the PCM samples; 320 bytes is a voice frame. 2 bytes is an end-of-transmission 'flush'.

Are you sure that your ALSA 'default' device is working?
Suggest downloading a short .wav file for test purposes and trying it out using the aplay utility.
Code:
aplay test.wav
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
The log shows that the audio player is starting and monitoring for traffic at 27.0.0.1:23456
Code:
Configuring audio instance #0 [audio0]
using ALSA sound system
audio device: default
Listening on 127.0.0.1:23456

I also see the channel destination set to 127.0.0.1:23456
Code:
channel (dev rtl_0): {u'plot': u'fft', u'name': u'CC', u'excess_bw': 0.2, u'symbol_rate': 4800, u'destination': u'udp://127.0.0.1:23456', u'demod_type': u'fsk4', u'filter_type': u'rrc', u'device': u'rtl_0',
u'if_rate': 24000}

Your tcpdump appears to be capturing the PCM samples; 320 bytes is a voice frame. 2 bytes is an end-of-transmission 'flush'.

Are you sure that your ALSA 'default' device is working?
Suggest downloading a short .wav file for test purposes and trying it out using the aplay utility.
Code:
aplay test.wav
The log shows that the audio player is starting and monitoring for traffic at 27.0.0.1:23456
Code:
Configuring audio instance #0 [audio0]
using ALSA sound system
audio device: default
Listening on 127.0.0.1:23456

I also see the channel destination set to 127.0.0.1:23456
Code:
channel (dev rtl_0): {u'plot': u'fft', u'name': u'CC', u'excess_bw': 0.2, u'symbol_rate': 4800, u'destination': u'udp://127.0.0.1:23456', u'demod_type': u'fsk4', u'filter_type': u'rrc', u'device': u'rtl_0',
u'if_rate': 24000}

Your tcpdump appears to be capturing the PCM samples; 320 bytes is a voice frame. 2 bytes is an end-of-transmission 'flush'.

Are you sure that your ALSA 'default' device is working?
Suggest downloading a short .wav file for test purposes and trying it out using the aplay utility.
Code:
aplay test.wav

Thanks - I tried...and aplay works, I can hear the sound.
I am really clueless, please consider it's a fresh installation of Raspbian...
As you can see in the screenshot, the bar under aplay in pavucontrol gets filled while playing the signal. In the case of python the bar remains completely grey.

example_audio.png
 
Last edited:

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
Most mysterious. You could try changing from ALSA to Pulse
Code:
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "audio0",
                "device_name": "pulse",
                "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 2
            }
        ]
    },
[code]
You probably also want to change the number_channels to 2 since DMR is a two-slot protocol.
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
Still nothing - may I suggest to try something different?
Could I write the output of the decoding to a raw file - I saw that in the json configuration is possible to set a raw file as output - and then try to play it, even from another pc? Is the raw file something playable with aplay? Could you help me trying this? At least we could assure that the signal is acquired and decoded correctly, beside the audio playback on the Raspberry.
Thank you.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
Still nothing - may I suggest to try something different?
Could I write the output of the decoding to a raw file - I saw that in the json configuration is possible to set a raw file as output - and then try to play it, even from another pc? Is the raw file something playable with aplay? Could you help me trying this? At least we could assure that the signal is acquired and decoded correctly, beside the audio playback on the Raspberry.
Thank you.
The "raw_output" functionality saves a binary file of raw dibit symbols as received and output by the demodulator. You can replay them using "raw_input" and use it for debugging/test purposes to recreate a scenario without access to the original radio environment.
Define the raw_output filename, run op25 until you have enough AMBE codewords captured, shut down and change "raw_output" to "raw_input" to replay.

That said, I'm not sure it's going to tell you much that you don't already know.
How about removing the audio instance name from cfg.json and then running "./audio.py -2 -s" on the command line in a separate terminal window. If it receives any UDP frames it will start spitting out garbage characters to the screen.
Note: the "-s" option is normally used by liquidsoap to capture a stream from <stdin>
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
That said, I'm not sure it's going to tell you much that you don't already know.
How about removing the audio instance name from cfg.json and then running "./audio.py -2 -s" on the command line in a separate terminal window. If it receives any UDP frames it will start spitting out garbage characters to the screen.
Note: the "-s" option is normally used by liquidsoap to capture a stream from <stdin>
Thank you for the advice, I tried but I have no output in the terminal - this is the beginning of the log:
Code:
Ignoring unnamed audio instance #0
device: {u'gains': u'LNA:39', u'args': u'rtl=0', u'tunable': True, u'rate': 2048000, u'frequency': 460587000, u'ppm': 0, u'offset': 0, u'name': u'rtl_0'}
Device name: "rtl_0", osmosdr args: "rtl=0"
gr-osmosdr 0.1.4 (0.1.4) gnuradio 3.7.13.4
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
[R82XX] PLL not locked!
channel (dev rtl_0): {u'plot': u'fft', u'name': u'CC', u'excess_bw': 0.2, u'symbol_rate': 4800, u'destination': u'udp://127.0.0.1:23456', u'demod_type': u'fsk4', u'filter_type': u'rrc', u'device': u'rtl_0',
 u'if_rate': 24000}
Using two-stage decimator for speed=2048000, decim=16/4 if1=128000 if2=32000
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
12/30/20 10:13:07.575603 [-1] Enabling nbfm analog audio
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
python version detected: 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0]
Allocating 15 zero-copy buffers
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO12/30/20 10:13:14.304815 [-1] PDP Header CRC failure
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO12/30/2
0 10:15:18.557835 [-1] PDP Header CRC failure
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO12/30/20 10:15:28.946516 [-1] AMBE 66 75 16 d8 2e d1 80 errs 0 err
_rate 0.000000
12/30/20 10:15:28.946891 [-1] AMBE 77 55 17 76 41 fe 00 errs 0 err_rate 0.000000
12/30/20 10:15:28.947076 [-1] AMBE d8 34 d7 68 63 f0 00 errs 0 err_rate 0.000000
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO12/30/20 10:16:17.993132 [-1] AMBE 60 e8 5d 12 2a f2 80 errs 0 err_rate 0.000000
12/30/20 10:16:17.993525 [-1] AMBE 60 e8 d4 1b 4a d1 00 errs 0 err_rate 0.000000
12/30/20 10:16:17.993669 [-1] AMBE 60 8b d4 84 2a 65 00 errs 4 err_rate 0.004256
OOOOOOOOOOOOOOOOOOOOOOOOO12/30/20 10:16:19.666307 [-1] AMBE 20 69 bf 00 21 80 00 errs 6 err_rate 0.010427
12/30/20 10:16:19.668291 [-1] AMBE 53 15 74 8d 44 aa 80 errs 7 err_rate 0.017354
12/30/20 10:16:19.670151 [-1] AMBE 51 61 84 b6 04 49 80 errs 8 err_rate 0.024998
OOOOOOOOOOO12/30/20 10:16:20.430526 [-1] AMBE ec 9e 82 47 3d 7c 00 errs 2 err_rate 0.025876
12/30/20 10:16:20.431826 [-1] AMBE 25 05 03 07 0d 41 00 errs 9 err_rate 0.034158
12/30/20 10:16:20.432827 [-1] AMBE 98 dc 16 2a 80 5b 00 errs 0 err_rate 0.032451
and this is the terminal:
example_audio_2.png
One question: in the log I see some AMBE lines, but one single AMBE line in the log to how much audio does correspond to? (for time perspective). I mean, is one AMBE line in the log equal to (for example) 0,5 seconds of audio?
I am asking just because I can see these lines in the log but quite few. I am decoding the same signal on another PC with DSD+ and from about 2 / 3 seconds of audio I get just around 10 AMBE lines in the log of op25. Is it working as expected?

Thanks again!
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
One single AMBE line is 20msec of audio.

The long lines of "O"s are concerning. They indicate internal buffer overrun in gnuradio, or more specifically not having enough cpu to keep up with the sample rate. Recommend reducing the device 'rate' parameter to 1000000
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
One single AMBE line is 20msec of audio.

The long lines of "O"s are concerning. They indicate internal buffer overrun in gnuradio, or more specifically not having enough cpu to keep up with the sample rate. Recommend reducing the device 'rate' parameter to 1000000
Ok - I am trying.
Is there a way to run multi_rx.py without Gnuplot? In case I would avoid to run X at all and use only the command line.
Thank you.
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
Unfortunately still nothing from audio.py written in the console.
I see "more" AMBE line in the logs, but still some "O"s.
htop show a load of the system of 3.2 after some hours of decoding.
Could it be a peformance issue resulting in the decoding get lost?

Thank you.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
Ok - I am trying.
Is there a way to run multi_rx.py without Gnuplot? In case I would avoid to run X at all and use only the command line.
Thank you.
Sure! Just delete any plot names from the "plot" parameter found in the channel definition section of the cfg file.
 

miclass

Member
Joined
Dec 27, 2020
Messages
21
Sure! Just delete any plot names from the "plot" parameter found in the channel definition section of the cfg file.

I did some other tests, also tried on another PC (intel one) with Ubuntu, using a different SDR device, tried a different frequency on which I receive another DMR signal, but unfortunately still no audio.

This is the config file I am using:
Code:
miclass@hp-prodesk:~/Scaricati/op25-master/op25/gr-op25_repeater/apps$ cat dmr_rtl_test_4.json
{
    "channels": [
        {
            "device": "rtl_0",
            "demod_type": "fsk4",
            "destination": "udp://127.0.0.1:23456",
            "excess_bw": 0.2,
            "filter_type": "rrc",
            "if_rate": 24000,
            "name": "CC",
            "symbol_rate": 4800
        }
    ],
    "devices": [
        {
            "args": "rtl=0",
            "frequency": 162362000,
            "gains": "LNA:39",
            "name": "rtl_0",
            "offset": 0,
            "ppm": 0,
            "rate": 1000000,
            "tunable": true
        }
    ],
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "audio0",
        "device_name": "default",
        "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 2
            }
        ]
    }   
}
And this is the first part of the logs (on the intel/Ubuntu machine):
Code:
miclass@hp-prodesk:~/Scaricati/op25-master/op25/gr-op25_repeater/apps$ ./multi_rx.py -c dmr_rtl_test_4.json -v 9
Using Python /usr/bin/python3
Configuring audio instance #0 [audio0]
using ALSA sound system
audio device: default
Listening on 127.0.0.1:23456
device: {'args': 'rtl=0', 'frequency': 162362000, 'gains': 'LNA:39', 'name': 'rtl_0', 'offset': 0, 'ppm': 0, 'rate': 1000000, 'tunable': True}
Device name: "rtl_0", osmosdr args: "rtl=0"
gr-osmosdr 0.2.0.0 (0.2.0) gnuradio 3.8.1.0
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!
channel (dev rtl_0): {'device': 'rtl_0', 'demod_type': 'fsk4', 'destination': 'udp://127.0.0.1:23456', 'excess_bw': 0.2, 'filter_type': 'rrc', 'if_rate': 24000, 'name': 'CC', 'symbol_rate': 4800}
Using two-stage decimator for speed=1000000, decim=10/4 if1=100000 if2=25000
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
12/31/20 16:27:52.209001 [-1] Enabling nbfm analog audio
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
python version detected: 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0]
Allocating 15 zero-copy buffers
12/31/20 16:27:53.526443 [-1] AMBE a7 29 50 6e 30 34 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.526856 [-1] AMBE a6 44 55 e3 c0 ee 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.526905 [-1] AMBE a6 69 b4 26 28 6e 00 errs 0 err_rate 0.000000
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 546, in run
    self.sock_audio.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 467, in run
    data_b = self.scale(data_b)
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 477, in scale
    arr = np.array(np.frombuffer(data, dtype=np.int16), dtype=np.float32)
12/31/20 16:27:53.530189 [-1] AMBE b8 19 b0 1b 4b e1 00 errs 0 err_rate 0.000000
TypeError: a bytes-like object is required, not 'str'
12/31/20 16:27:53.530257 [-1] AMBE c8 12 1d cc a3 53 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.530293 [-1] AMBE c8 21 65 2a eb 72 00 errs 0 err_rate 0.000000
12/31/20 16:27:53.657475 [-1] AMBE 98 4c 75 e7 45 ee 00 errs 0 err_rate 0.000000
12/31/20 16:27:53.657595 [-1] AMBE a7 55 30 47 51 e1 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.657627 [-1] AMBE a2 99 75 4a b1 78 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.660055 [-1] AMBE a2 89 31 cf 5a 65 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.660139 [-1] AMBE a8 30 58 46 44 90 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.660232 [-1] AMBE a8 1f 54 5a ac c0 80 errs 0 err_rate 0.000000

I see many AMBE rows in the logs, I don't know if that execption may have some impact...(never seen on raspberry).
Any other suggestion to troubleshoot this situation?
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
I did some other tests, also tried on another PC (intel one) with Ubuntu, using a different SDR device, tried a different frequency on which I receive another DMR signal, but unfortunately still no audio.

This is the config file I am using:
Code:
miclass@hp-prodesk:~/Scaricati/op25-master/op25/gr-op25_repeater/apps$ cat dmr_rtl_test_4.json
{
    "channels": [
        {
            "device": "rtl_0",
            "demod_type": "fsk4",
            "destination": "udp://127.0.0.1:23456",
            "excess_bw": 0.2,
            "filter_type": "rrc",
            "if_rate": 24000,
            "name": "CC",
            "symbol_rate": 4800
        }
    ],
    "devices": [
        {
            "args": "rtl=0",
            "frequency": 162362000,
            "gains": "LNA:39",
            "name": "rtl_0",
            "offset": 0,
            "ppm": 0,
            "rate": 1000000,
            "tunable": true
        }
    ],
    "audio": {
        "module": "sockaudio.py",
        "instances": [
            {
                "instance_name": "audio0",
        "device_name": "default",
        "udp_port": 23456,
                "audio_gain": 1.0,
                "number_channels": 2
            }
        ]
    } 
}
And this is the first part of the logs (on the intel/Ubuntu machine):
Code:
miclass@hp-prodesk:~/Scaricati/op25-master/op25/gr-op25_repeater/apps$ ./multi_rx.py -c dmr_rtl_test_4.json -v 9
Using Python /usr/bin/python3
Configuring audio instance #0 [audio0]
using ALSA sound system
audio device: default
Listening on 127.0.0.1:23456
device: {'args': 'rtl=0', 'frequency': 162362000, 'gains': 'LNA:39', 'name': 'rtl_0', 'offset': 0, 'ppm': 0, 'rate': 1000000, 'tunable': True}
Device name: "rtl_0", osmosdr args: "rtl=0"
gr-osmosdr 0.2.0.0 (0.2.0) gnuradio 3.8.1.0
built-in source types: file osmosdr fcd rtl rtl_tcp uhd miri hackrf bladerf rfspace airspy airspyhf soapy redpitaya freesrp
Using device #0 Realtek RTL2838UHIDIR SN: 00000001
Found Rafael Micro R820T tuner
[R82XX] PLL not locked!
Exact sample rate is: 1000000.026491 Hz
[R82XX] PLL not locked!
channel (dev rtl_0): {'device': 'rtl_0', 'demod_type': 'fsk4', 'destination': 'udp://127.0.0.1:23456', 'excess_bw': 0.2, 'filter_type': 'rrc', 'if_rate': 24000, 'name': 'CC', 'symbol_rate': 4800}
Using two-stage decimator for speed=1000000, decim=10/4 if1=100000 if2=25000
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
12/31/20 16:27:52.209001 [-1] Enabling nbfm analog audio
op25_audio::open_socket(): enabled udp host(127.0.0.1), wireshark(23456), audio(23456)
python version detected: 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0]
Allocating 15 zero-copy buffers
12/31/20 16:27:53.526443 [-1] AMBE a7 29 50 6e 30 34 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.526856 [-1] AMBE a6 44 55 e3 c0 ee 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.526905 [-1] AMBE a6 69 b4 26 28 6e 00 errs 0 err_rate 0.000000
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 546, in run
    self.sock_audio.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 467, in run
    data_b = self.scale(data_b)
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 477, in scale
    arr = np.array(np.frombuffer(data, dtype=np.int16), dtype=np.float32)
12/31/20 16:27:53.530189 [-1] AMBE b8 19 b0 1b 4b e1 00 errs 0 err_rate 0.000000
TypeError: a bytes-like object is required, not 'str'
12/31/20 16:27:53.530257 [-1] AMBE c8 12 1d cc a3 53 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.530293 [-1] AMBE c8 21 65 2a eb 72 00 errs 0 err_rate 0.000000
12/31/20 16:27:53.657475 [-1] AMBE 98 4c 75 e7 45 ee 00 errs 0 err_rate 0.000000
12/31/20 16:27:53.657595 [-1] AMBE a7 55 30 47 51 e1 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.657627 [-1] AMBE a2 99 75 4a b1 78 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.660055 [-1] AMBE a2 89 31 cf 5a 65 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.660139 [-1] AMBE a8 30 58 46 44 90 80 errs 0 err_rate 0.000000
12/31/20 16:27:53.660232 [-1] AMBE a8 1f 54 5a ac c0 80 errs 0 err_rate 0.000000

I see many AMBE rows in the logs, I don't know if that execption may have some impact...(never seen on raspberry).
Any other suggestion to troubleshoot this situation?
Well that's a new error which would definitely stop the audio playback. :(
Code:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 546, in run
    self.sock_audio.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 467, in run
    data_b = self.scale(data_b)
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 477, in scale
    arr = np.array(np.frombuffer(data, dtype=np.int16), dtype=np.float32)

I'm curious if you are running the latest code? My sockaudio.py line 477 is not the same as yours.
 
Last edited:

miclass

Member
Joined
Dec 27, 2020
Messages
21
Well that's a new error which would definitely stop the audio playback. :(
Code:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 546, in run
    self.sock_audio.run()
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 467, in run
    data_b = self.scale(data_b)
  File "/home/miclass/Scaricati/op25-master/op25/gr-op25_repeater/apps/sockaudio.py", line 477, in scale
    arr = np.array(np.frombuffer(data, dtype=np.int16), dtype=np.float32)

I'm curious if you are running the latest code? My sockaudio.py line 477 is not the same as yours.
I downloaded it this morning from Git (using the zip package):
Code:
miclass@hp-prodesk:~/Scaricati$ ls -la op25*
-rw-rw-r-- 1 miclass miclass 1085327 dic 31 11:10 op25-master.zip

Some news from Raspberry side...I am trying now on a Raspberry 4 - installed raspian buster (lite version), then op25 using install.sh and liquidsoap (to try something different). I deleted the "audio" section from .json and launched op25.liq (increasing log and setting pulse as output, I had to start pulseaudio manually), this is the log from op25.liq:
Code:
2020/12/31 19:57:33 >>> LOG START
2020/12/31 19:57:33 [main:3] Liquidsoap 1.3.3
2020/12/31 19:57:33 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=7.2.3 dtools=0.4.0 duppy=0.7.2 duppy.syntax=0.7.2 cry=0.6.2 mm=0.3.1 xmlplaylist=0.1.3 lastfm=0.3.0 ogg=0.5.2 vorbis=0.7.1 opus=0.1.2 speex=0.2.1 mad=0.4.4 flac=0.1.3 flac.ogg=0.1.3 dynlink=[distributed with Ocaml] lame=0.3.2 shine=0.2.0 gstreamer=0.2.0 frei0r=0.1.0 theora=0.3.1 gavl=0.1.5 bjack=0.1.4 alsa=0.2.3 ao=0.2.0 samplerate=0.1.2 taglib=0.3.1 magic=0.7.3 camomile=0.8.5 yojson=1.3.2 faad=0.4.0 soundtouch=0.1.7 portaudio=0.2.1 pulseaudio=0.1.2 ladspa=0.1.4 dssi=0.1.1 sdl=0.9.1 camlimages=4.2.0 lo=0.1.0 gd=1.0a5
2020/12/31 19:57:33 [gstreamer.loader:3] Loaded GStreamer 1.14.4 0
2020/12/31 19:57:33 [dynamic.loader:3] Could not find dynamic module for fdkaac encoder.
2020/12/31 19:57:33 [frame:3] Using 8000Hz audio, 25Hz video, 8000Hz master.
2020/12/31 19:57:33 [frame:3] Frame size must be a multiple of 320 ticks = 320 audio samples = 1 video samples.
2020/12/31 19:57:33 [frame:3] Targetting 'frame.duration': 0.04s = 320 audio samples = 320 ticks.
2020/12/31 19:57:33 [frame:3] Frames last 0.04s = 320 audio samples = 1 video samples = 320 ticks.
2020/12/31 19:57:33 [video.converter:4] Using preferred video converter: gavl.
2020/12/31 19:57:33 [audio.converter:4] Using preferred samplerate converter: libsamplerate.
2020/12/31 19:57:33 [threads:3] Created thread "generic queue #1".
2020/12/31 19:57:33 [threads:3] Created thread "generic queue #2".
2020/12/31 19:57:33 [threads:3] Created thread "non-blocking queue #1".
2020/12/31 19:57:33 [threads:3] Created thread "non-blocking queue #2".
2020/12/31 19:57:33 [clock:4] Currently 1 clocks allocated.
2020/12/31 19:57:33 [clock.wallclock_pulse:4] Starting 1 sources...
2020/12/31 19:57:33 [source:4] Source output.pulseaudio_7216 gets up.
2020/12/31 19:57:33 [source:4] Source mksafe gets up.
2020/12/31 19:57:33 [source:4] Source input.external_7212 gets up.
2020/12/31 19:57:33 [input.external_7212:3] Starting process
2020/12/31 19:57:33 [input.external_7212:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:57:33 [source:4] Source safe_blank gets up.
2020/12/31 19:57:33 [safe_blank:4] Content kind is {audio=2;video=0;midi=0}.
2020/12/31 19:57:33 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:57:33 [mksafe:4] Activations changed: static=[pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[].
2020/12/31 19:57:33 [pulse_out(liquidsoap:):4] Activations changed: static=[pulse_out(liquidsoap:)], dynamic=[].
2020/12/31 19:57:33 [pulse_out(liquidsoap:):4] Enabling caching mode: active source.
2020/12/31 19:57:33 [clock.wallclock_pulse:4] Delegating clock to active sources.
2020/12/31 19:57:33 [threads:3] Created thread "wallclock_pulse" (1 total).
2020/12/31 19:57:33 [clock:4] Main phase starts.
2020/12/31 19:57:33 [clock.wallclock_pulse:3] Streaming loop starts, synchronized by active sources.
2020/12/31 19:57:33 [mksafe:3] Switch to safe_blank.
2020/12/31 19:57:33 [safe_blank:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:57:33 [input.external_7212:5] Using Python /usr/bin/python2

2020/12/31 19:57:33 [input.external_7212:5] audio device: stdout
Listening on 0.0.0.0:23456

2020/12/31 19:58:23 [mksafe:3] Switch to input.external_7212 with transition.
2020/12/31 19:58:23 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:23 [input.external_7212:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:24 [input.external_7212:4] End of track.
2020/12/31 19:58:24 [input.external_7212:4] Buffer emptied, buffering needed.
2020/12/31 19:58:24 [mksafe:3] Switch to safe_blank with forgetful transition.
2020/12/31 19:58:24 [input.external_7212:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:24 [safe_blank:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:26 [mksafe:3] Switch to input.external_7212 with transition.
2020/12/31 19:58:26 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:26 [input.external_7212:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:27 [input.external_7212:4] Buffer emptied, buffering needed.
2020/12/31 19:58:27 [mksafe:3] Switch to safe_blank with transition.
2020/12/31 19:58:27 [input.external_7212:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:27 [safe_blank:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:28 [mksafe:3] Switch to input.external_7212 with transition.
2020/12/31 19:58:28 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:28 [input.external_7212:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:30 [input.external_7212:4] Buffer emptied, buffering needed.
2020/12/31 19:58:30 [mksafe:3] Switch to safe_blank with transition.
2020/12/31 19:58:30 [input.external_7212:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:30 [safe_blank:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:31 [mksafe:3] Switch to input.external_7212 with transition.
2020/12/31 19:58:31 [safe_blank:4] Activations changed: static=[], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:31 [input.external_7212:4] Activations changed: static=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)], dynamic=[mksafe:pulse_out(liquidsoap:):pulse_out(liquidsoap:)].
2020/12/31 19:58:36 [source:4] Garbage collected empty_7239.
^C2020/12/31 19:58:39 [main:3] Shutdown started!
2020/12/31 19:58:39 [main:3] Waiting for threads to terminate...
2020/12/31 19:58:39 [pulse_out(liquidsoap:):4] Activations changed: static=[], dynamic=[].
2020/12/31 19:58:39 [source:4] Source pulse_out(liquidsoap:) gets down.

And no audio :-(
I see many AMBE lines in the log.
aplay does work if I check with a wave audio. Also using alsa, no audio.

Happy new year, and thank you for your help.
 

boatbod

Member
Joined
Mar 3, 2007
Messages
3,338
Location
Talbot Co, MD
For the minute or so that you had liquidsoap running I can see 6 transitions between receiving data from op25 and filling in blanks (idle time).
op25 is definitely outputting some data to the pcm stream.

I'd like you to capture a raw_output file and corresponding stderr.2 of a few minutes operation (running at "-v 9" or "-v 10") then PM'd me so that we can arrange a way for me to get the file. (Email, dropbox, google drive, ...)

Thanks
 
Status
Not open for further replies.
Top