Functionally almost done?

waterfallMarker

Click any place on the lower half of the waterfall, generated by Soft66LC4 with its LO at 7020kHz, and IC-7410 will be tuned to that frequency, which you can observe ty the dark marker in the middle. Each of the three markers on the upper edge shows the baseband frequencies of 400Hz/600Hz/800Hz, respectively.

% sprigmm /dev/ttyUSB0 hw:2,0 16000 1 hw:0,0 48000 2

Note that although the FFT size is the same, the sampling frequencies differ between the two receivers.

The mode of IC-7410 is currently “CW”, receiving the lower side band, so only the lower side band is shown on the upper half.

Analogue SDR and LO

Contest

A contest is going on now, and many signals are observed even with my antenna.

The upper half of the waterfall shows the signal from IC-7410 (LSB mode, 3kHz bandwidth), and the lower half from Soft66LC4 with its LO at 7025kHz. (The contest band for 7MHz CW is 7010kHz-7040kHz.)

% sprigmm /dev/ttyUSB0 hw:2,0 32000 1 hw:0,0 48000 2

You can not tune IC-7410 very close to the LO of Soft66LC4, because the LO is strongly received with my simplest splitter which gives only 0dB isolation.

LOleak

A low frequency componet comes from the LO, and see its ampllitude compared with those of other signals.

Orpheus and Bit Perfect

OrpheusBitperfect

This is my old experiment in November 2010.

I copied a 44.1kHz/16bit sound file into a USB memory, and played it on PS3. The optical output (SPDIF) of PS3 is fed into the optical input of Orpheus, and the data is captured using ffado and jackd.

The figure shows that the original data matches the captured data perfectly.

Orpheus and its Sync Source (2)

OrpheusPCDAW

I thought the settings by the Control Panel is saved in the EEPROM of Orpheus when it is powered off, but I was (partially) wrong in my understanding.

According to the manual,
http://www.prismsound.com/music_recording/products_subs/orpheus/online_manual/index.html, (Contents -> Orpheus hardware -> Stand-alone operation):

When the unit is re-powered, and detects that no FireWire connection is active, it reloads the settings which were previously stored.

Orpheus and its Sync Source

OrpheusSyncSource

The control panel tells that the Sync Source is Internal. (Please click the image to enlarge.)

% ls -l /proc/asound
lrwxrwxrwx 1 root root 5 Apr 24 20:24 Orpheus -> card0

% cat /proc/asound/card0/firewire/clock
Sampling rate: 44100
Clock Source: External (MSU-dest: 7)

% cat /proc/version_signature 
Ubuntu 3.19.0-15.15-generic 3.19.3

% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.04
DISTRIB_CODENAME=vivid
DISTRIB_DESCRIPTION="Ubuntu 15.04"

But, the proc asound file says “Clock Source: External”, which I do not understand.

Ground on Transmit

rearpanel

I was always wondering what kind of waveform is generated for the send control signal of my IC-7410.

sendcontrol

Here is what I observed with OWON PDS5022S.

waveform2

It seems that there is a gap of around 8mS between the control signal and the RF output.

waveform3

Clean Install

ubuntu1410

I clean installed Ubuntu 14.10 (Utopic Unicorn) so that I can restart from a simple environment.

Perhaps the minimum requirement to run IC-7410 Rig Control Program, sprigmm, is:

% apt-get install libgtkmm-3.0-dev
% apt-get install libasound2-dev
% apt-get install libfftw3-dev

If you wish to control Soft66LC4:

% apt-get install libftdi-dev

% wget http://www.infowares.com/soft66/soft66-0.1.3-test.tar.gz
% tar xvfz soft66-0.1.3-test.tar.gz 
% cd soft66-0.1.3-test
% ./configure && make && make install

And then, get the sprigmm source at https://github.com/jh1ood/sprigmm/tree/develop, and compile it by doing:

% g++ -std=c++11 -fpermissive *.cpp -o sprigmm -lm -lasound -lfftw3 -I/usr/include/alsa `pkg-config gtkmm-3.0 --cflags --libs`

You will also check your device IDs, etc.

% arecord --list-devices
**** List of CAPTURE Hardware Devices ****
card 0: MID [HDA Intel MID], device 0: ALC889 Analog [ALC889 Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 0: MID [HDA Intel MID], device 2: ALC889 Alt Analog [ALC889 Alt Analog]
  Subdevices: 2/2
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
card 2: Orpheus [Orpheus], device 0: BeBoB [Orpheus PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
  Subdevices: 0/1
  Subdevice #0: subdevice #0

% ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Apr 23 08:54 /dev/ttyUSB0

Then you set the LO of Soft66LC4, and here we go.

% soft66-control -t 7020
% ./sprigmm /dev/ttyUSB0 hw:3,0 32000 1 hw:0,0 48000 2

VoilĂ !

gtkmm

Firewire (IEEE1394) Audio Device and Linux (2)

== snd-firewire-lib, snd-bebob, snd-fireworks, snd-dice, snd-oxfw and snd-digi00x ==

They are device drivers utilize Advanced Linux Sound Architecture (ALSA) and Linux
Firewire Subsystem (so called "juju").
 - snd-bebob: for devices based on BridgeCo's chipset and BeBoB firmware
 - snd-fireworks: for devices based on Echo Audio's Fireworks module
 - snd-dice: for devices based on TC Applied Technologies DICE chipset family
 - snd-oxfw: for devices based on Oxford Semiconductor OXFW970/971 chipset
 - snd-digi00x: for Digidesign 002/003 family
 - snd-firewire-lib: for helper functions of AMDTP/CMP/FCP and AV/C commands

https://github.com/takaswie/snd-firewire-improve

Let’s try if this works.

Install:
1. $ git clone https://github.com/takaswie/snd-firewire-improve.git
2. $ ln -s $(pwd)/snd-firewire-improve/ /usr/src/alsa-firewire-3.11
(superuser)
3. $ dkms install alsa-firewire/3.11 (superuser)
% modprobe snd-bebob
 % ls -l /proc/asound
dr-xr-xr-x 6 root root 0 Apr 22 09:03 card0
dr-xr-xr-x 3 root root 0 Apr 22 09:03 card1
dr-xr-xr-x 5 root root 0 Apr 22 09:03 card2
lrwxrwxrwx 1 root root 5 Apr 22 09:03 MID -> card0
lrwxrwxrwx 1 root root 5 Apr 22 09:03 HDMI -> card1
lrwxrwxrwx 1 root root 5 Apr 22 09:03 Orpheus -> card2

% aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: MID [HDA Intel MID], device 0: ALC889 Analog [ALC889 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: MID [HDA Intel MID], device 3: ALC889 Digital [ALC889 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Orpheus [Orpheus], device 0: BeBoB [Orpheus PCM]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
user1@UNIX [09:03:37] [~] 

% aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
rawjack
jack
    JACK Audio Connection Kit
default
    Playback/recording through the PulseAudio sound server
sysdefault:CARD=MID
    HDA Intel MID, ALC889 Analog
    Default Audio Device
front:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    Front speakers
surround40:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
hdmi:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Digital
    HDMI Audio Output
dmix:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    Direct sample mixing device
dmix:CARD=MID,DEV=3
    HDA Intel MID, ALC889 Digital
    Direct sample mixing device
dsnoop:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    Direct sample snooping device
dsnoop:CARD=MID,DEV=3
    HDA Intel MID, ALC889 Digital
    Direct sample snooping device
hw:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    Direct hardware device without any conversions
hw:CARD=MID,DEV=3
    HDA Intel MID, ALC889 Digital
    Direct hardware device without any conversions
plughw:CARD=MID,DEV=0
    HDA Intel MID, ALC889 Analog
    Hardware device with all software conversions
plughw:CARD=MID,DEV=3
    HDA Intel MID, ALC889 Digital
    Hardware device with all software conversions
hdmi:CARD=HDMI,DEV=0
    HDA ATI HDMI, HDMI 0
    HDMI Audio Output
dmix:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Direct sample mixing device
dsnoop:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Direct sample snooping device
hw:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Direct hardware device without any conversions
plughw:CARD=HDMI,DEV=3
    HDA ATI HDMI, HDMI 0
    Hardware device with all software conversions
sysdefault:CARD=Orpheus
    Orpheus, Orpheus PCM
    Default Audio Device
dmix:CARD=Orpheus,DEV=0
    Orpheus, Orpheus PCM
    Direct sample mixing device
dsnoop:CARD=Orpheus,DEV=0
    Orpheus, Orpheus PCM
    Direct sample snooping device
hw:CARD=Orpheus,DEV=0
    Orpheus, Orpheus PCM
    Direct hardware device without any conversions
plughw:CARD=Orpheus,DEV=0
    Orpheus, Orpheus PCM
    Hardware device with all software conversions

bebob

Looks nice, but …

% aplay -D hw:2,0 Music/01-Taking_Chances.wav
Playing WAVE 'Music/01-Taking_Chances.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
aplay: set_params:1239: Channels count non available

% aplay -D hw:2,0 --channels=2 Music/01-Taking_Chances.wav
Playing WAVE 'Music/01-Taking_Chances.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
aplay: set_params:1239: Channels count non available

Let’s look into aplay.c to see what is happening.

1237   err = snd_pcm_hw_params_set_channels(handle, params, hwparams.channels);
1238   if (err < 0) {
1239     error(_("Channels count non available"));
1240     prg_exit(EXIT_FAILURE);
1241   }

Firewire (IEEE1394) Audio Device and Linux

orpheus_f

I suppose it was in 2009 when I stared using a firewire audio interface for listening to music. At that time, with Ubuntu 9.04 or so, you needed to install some libraries such as Juju, FFADO, and Jack by yourself. (I was not very interested in Ubuntu Studio.)

Now, the year is 2015, and what do I have to do with Ubuntu 14.04 TLS?

I asked Google, and found this article: https://lists.ubuntu.com/archives/ubuntu-studio-devel/2014-May/005797.html.

And in the file, https://github.com/takaswie/snd-firewire-improve/blob/master/sound/firewire/bebob/bebob.c, it says:

/*
 * bebob.c - a part of driver for BeBoB based devices
 *
 * Copyright (c) 2013-2014 Takashi Sakamoto
 *
 * Licensed under the terms of the GNU General Public License, version 2.
 */

#define VEN_PRISMSOUND	0x00001198

static const struct ieee1394_device_id bebob_id_table[] = {
	/* PrismSound, Orpheus */
	SND_BEBOB_DEV_ENTRY(VEN_PRISMSOUND, 0x00010048, &spec_normal),

So there are some developments going on. Let’see what happens in my environment.

% ffado-diag
=== CHECK ===
 Base system...
  kernel version............ 3.13.0-49-generic
    Preempt (low latency)... False
    RT patched.............. False
  old 1394 stack present.... Falsehttp://qjackctl.sourceforge.net/
  old 1394 stack loaded..... False
  old 1394 stack active..... False
  new 1394 stack present.... True
  new 1394 stack loaded..... True
  new 1394 stack active..... True
  /dev/raw1394 node present. False
  /dev/fw* permissions:
crw-------  1 root root  250, 0 Apr 21 14:59 /dev/fw0
crw-rw----+ 1 root video 250, 1 Apr 21 16:56 /dev/fw1
% ffado-test ListDevices
=== 1394 PORT 0 ===
  Node id  GUID                  VendorId     ModelId   Vendor - Model
   0       0x00119800010001f9  0x00001198  0x00010048   Prism Media Products  - Orpheus
   1       0x0010dc0001bad8cf  0x000010DC  0x00000000   Linux Firewire - 
no message buffer overruns

Let’s try Audacity with QjackCtl.

audacityfirewire

Or from CLI using aplay:

% cat .asoundrc
pcm.rawjack {
    type jack
    playback_ports {
        0 system:playback_1
        1 system:playback_2
    }
    capture_ports {
        0 system:capture_1
        1 system:capture_2
    }
}

pcm.jack {
    type plug
    slave { pcm "rawjack" }
    hint {
    description "JACK Audio Connection Kit"
    }
}

pcm.!default {
    type plug
    slave { pcm "rawjack" }
}
% jackd -R -dfirewire -r44100 -p4096 -n3
% aplay -D pcm.jack Music/01-Taking_Chances.wav

Or using alsaplayer:

% alsaplayer -i text -o jack -d "system:playback_1,system:playback_2" Music/01-Taking_Chances.wav