|
|||||||
| Home | Forums | Rules | Articles | Store | Gallery | Blogs | Register | Donations | FAQ | Calendar | Search | Today's Posts | Mark Forums Read | Search |
| PC Based Computer music servers, crossovers, and equalization |
|
Please consider donating to help us continue to serve you.
Ads on/off / Custom Title / More PMs / More album space / Advanced printing & mass image saving |
|
![]() |
|
|
Thread Tools | Search this Thread |
|
|
#701 | |
|
diyAudio Member
|
Quote:
Don't panic! I am still using U-Studio on my Audio machine. And it is still recommended.However, if you run a pure audio client - perhaps even without screen - there is nothing against running a nice Kubuntu with MPD on the remote machine. All the nice features plasma/compositing/etc. eat performance en masse - especially on older machines. You could try to run the rt-kernel on a normal Ubuntu installation. I am not really sure, but if I recall it right the desktop gets niced by -10, which should make a difference.
__________________
::: Squeezebox Touch Toolbox and more ::: by soundcheck |
|
|
|
|
#702 |
|
diyAudio Member
Join Date: Apr 2005
Location: Pilsen
|
Mark,
I do not think you should worry about RAM disc/rt kernel/latencies with ICE1712 card for pure playback UNLESS you are recording/monitoring (i.e. requiring minimum latency). Let me give you a few examples based on my ICE1724 card. The chips are very similar, just test your card yourself. Ubuntu Studio 8.04 with NON-rt (generic) kernel, Duron 1GHz (ancient HW), 512MB RAM. pavel@nahore:~/audio$ aplay -v -F 1000000 -D plughw:0 441.wav Playing WAVE '441.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo Plug PCM: Linear conversion PCM (S32_LE) Its setup is: buffer_size : 32768 period_size : 16384 period_time : 371519 tick_time : 0 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 16384 xfer_align : 16384 start_threshold : 32768 stop_threshold : 32768 silence_threshold: 0 silence_size : 0 boundary : 1073741824 Slave: Hardware PCM card 0 'Audiotrak Prodigy 192' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : MMAP_INTERLEAVED format : S32_LE subformat : STD channels : 2 rate : 44100 exact rate : 44100 (44100/1) msbits : 24 buffer_size : 32768 period_size : 16384 period_time : 371519 tick_time : 0 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 16384 xfer_align : 16384 start_threshold : 32768 stop_threshold : 32768 silence_threshold: 0 silence_size : 0 boundary : 1073741824 The parameter -F means distance between interrupts in microseconds. I put 1second, the driver allows maximum of 371519us = 0,37s - see the period_time in the verbose output. That should mean the card receives data via DMA only three times a second. Let's check the interrupts if it fits: pavel@nahore:~$ while true; do ( cat /proc/interrupts | grep ICE ); sleep 1s; done 18: 263393 IO-APIC-fasteoi ICE1724 18: 263396 IO-APIC-fasteoi ICE1724 18: 263399 IO-APIC-fasteoi ICE1724 18: 263402 IO-APIC-fasteoi ICE1724 18: 263404 IO-APIC-fasteoi ICE1724 18: 263407 IO-APIC-fasteoi ICE1724 18: 263409 IO-APIC-fasteoi ICE1724 Voila, roughly 3 interrupts per second. Now let's take another extreme: pavel@nahore:~/audio$ aplay -v -F 1 -D plughw:0 441.wav Playing WAVE '441.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo Plug PCM: Linear conversion PCM (S32_LE) Its setup is: ..... buffer_size : 8192 period_size : 8 period_time : 181 ..... Slave: Hardware PCM card 0 'Audiotrak Prodigy 192' device 0 subdevice 0 Its setup is: ..... buffer_size : 8192 period_size : 8 period_time : 181 ..... Interrupt (period_time) should happen every 181us. And the check: pavel@nahore:~$ while true; do ( cat /proc/interrupts | grep ICE ); sleep 1s; done 18: 307993 IO-APIC-fasteoi ICE1724 18: 313795 IO-APIC-fasteoi ICE1724 18: 319456 IO-APIC-fasteoi ICE1724 18: 325118 IO-APIC-fasteoi ICE1724 18: 330778 IO-APIC-fasteoi ICE1724 18: 336443 IO-APIC-fasteoi ICE1724 1/ (330778 - 325118) = 1 / 5660 = 0.000176 = 176 us Taking into account the time overhead of the check script (the printout period is actually slightly over 1 second), we are getting very precise confirmations. This means, you can set your own interrupt rate between 181us and 0.37s. No doubt the lowest latency will be sensitive to CPU load, perhaps to HDD latencies too (depending mainly on implementation details of the player, how much it buffers etc.). However for the largest period time and bit-perfect CD-DA quality playback, even the slowest system with huge latencies is fast enough to load (44100 bytes x 32 bits x 2 channels) / 3 = 117 600 bytes of data to RAM three times a second for the card to read it itself via DMA. |
|
|
|
#703 |
|
diyAudio Member
Join Date: Sep 2006
|
Thanks phofman - great detail.
I will get the settings on my machine posted when I get a chance. (Bit busy the last couple of evenings) Mark |
|
|
|
#704 |
|
diyAudio Member
Join Date: Sep 2006
|
Here you go:
root@u:/home/mark# aplay -l **** List of PLAYBACK Hardware Devices **** card 0: M2496 [M Audio Audiophile 24/96], device 0: ICE1712 multi [ICE1712 multi] Subdevices: 0/1 Subdevice #0: subdevice #0 root@u:/home/mark# cat /proc/asound/version Advanced Linux Sound Architecture Driver Version 1.0.16. Compiled on Jun 18 2008 for kernel 2.6.24-19-rt (SMP) root@u:/home/mark# amixer contents numid=35,iface=CARD,name='ICE1712 EEPROM' ; type=BYTES,access=r-------,values=52 : values=0xd6,0x34,0x14,0x12,0x1d,0x01,0x10,0x80,0x7 2,0x03,0x04,0xfe,0xfb, 0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x04,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x04,0x00,0x00,0x00,0xfe ,0x00,0x00,0x00,0xfb,0x00,0x00,0x00 numid=48,iface=MIXER,name='ADC Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=163,step=0 : values=102 | dBscale-min=-63.50dB,step=0.50dB,mute=1 numid=49,iface=MIXER,name='ADC Volume',index=1 ; type=INTEGER,access=rw---R--,values=1,min=0,max=163,step=0 : values=127 | dBscale-min=-63.50dB,step=0.50dB,mute=1 numid=29,iface=MIXER,name='IEC958 Multi Capture Switch' ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=30,iface=MIXER,name='IEC958 Multi Capture Switch',index=1 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=33,iface=MIXER,name='IEC958 Multi Capture Volume' ; type=INTEGER,access=rw------,values=2,min=0,max=96,step=0 : values=0,0 numid=34,iface=MIXER,name='IEC958 Multi Capture Volume',index=1 ; type=INTEGER,access=rw------,values=2,min=0,max=96,step=0 : values=0,0 numid=42,iface=MIXER,name='IEC958 Playback Route' ; type=ENUMERATED,access=rw------,values=1,items=12 ; Item #0 'PCM Out' ; Item #1 'H/W In 0' ; Item #2 'H/W In 1' ; Item #3 'H/W In 2' ; Item #4 'H/W In 3' ; Item #5 'H/W In 4' ; Item #6 'H/W In 5' ; Item #7 'H/W In 6' ; Item #8 'H/W In 7' ; Item #9 'IEC958 In L' ; Item #10 'IEC958 In R' ; Item #11 'Digital Mixer' : values=0 numid=43,iface=MIXER,name='IEC958 Playback Route',index=1 ; type=ENUMERATED,access=rw------,values=1,items=12 ; Item #0 'PCM Out' ; Item #1 'H/W In 0' ; Item #2 'H/W In 1' ; Item #3 'H/W In 2' ; Item #4 'H/W In 3' ; Item #5 'H/W In 4' ; Item #6 'H/W In 5' ; Item #7 'H/W In 6' ; Item #8 'H/W In 7' ; Item #9 'IEC958 In L' ; Item #10 'IEC958 In R' ; Item #11 'Digital Mixer' : values=0 numid=46,iface=MIXER,name='DAC Volume' ; type=INTEGER,access=rw---R--,values=1,min=0,max=127,step=0 : values=102 | dBscale-min=-63.50dB,step=0.50dB,mute=1 numid=47,iface=MIXER,name='DAC Volume',index=1 ; type=INTEGER,access=rw---R--,values=1,min=0,max=127,step=0 : values=127 | dBscale-min=-63.50dB,step=0.50dB,mute=1 numid=50,iface=MIXER,name='Deemphasis' ; type=ENUMERATED,access=rw------,values=1,items=4 ; Item #0 '44.1kHz' ; Item #1 'Off' ; Item #2 '48kHz' ; Item #3 '32kHz' : values=1 numid=27,iface=MIXER,name='H/W Multi Capture Switch' ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=28,iface=MIXER,name='H/W Multi Capture Switch',index=1 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=31,iface=MIXER,name='H/W Multi Capture Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=32,iface=MIXER,name='H/W Multi Capture Volume',index=1 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=40,iface=MIXER,name='H/W Playback Route' ; type=ENUMERATED,access=rw------,values=1,items=12 ; Item #0 'PCM Out' ; Item #1 'H/W In 0' ; Item #2 'H/W In 1' ; Item #3 'H/W In 2' ; Item #4 'H/W In 3' ; Item #5 'H/W In 4' ; Item #6 'H/W In 5' ; Item #7 'H/W In 6' ; Item #8 'H/W In 7' ; Item #9 'IEC958 In L' ; Item #10 'IEC958 In R' ; Item #11 'Digital Mixer' : values=0 numid=41,iface=MIXER,name='H/W Playback Route',index=1 ; type=ENUMERATED,access=rw------,values=1,items=12 ; Item #0 'PCM Out' ; Item #1 'H/W In 0' ; Item #2 'H/W In 1' ; Item #3 'H/W In 2' ; Item #4 'H/W In 3' ; Item #5 'H/W In 4' ; Item #6 'H/W In 5' ; Item #7 'H/W In 6' ; Item #8 'H/W In 7' ; Item #9 'IEC958 In L' ; Item #10 'IEC958 In R' ; Item #11 'Digital Mixer' : values=0 numid=7,iface=MIXER,name='Multi Playback Switch' ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=8,iface=MIXER,name='Multi Playback Switch',index=1 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=9,iface=MIXER,name='Multi Playback Switch',index=2 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=10,iface=MIXER,name='Multi Playback Switch',index=3 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=11,iface=MIXER,name='Multi Playback Switch',index=4 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=12,iface=MIXER,name='Multi Playback Switch',index=5 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=13,iface=MIXER,name='Multi Playback Switch',index=6 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=14,iface=MIXER,name='Multi Playback Switch',index=7 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=15,iface=MIXER,name='Multi Playback Switch',index=8 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=16,iface=MIXER,name='Multi Playback Switch',index=9 ; type=BOOLEAN,access=rw------,values=2 : values=off,off numid=17,iface=MIXER,name='Multi Playback Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=18,iface=MIXER,name='Multi Playback Volume',index=1 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=19,iface=MIXER,name='Multi Playback Volume',index=2 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=20,iface=MIXER,name='Multi Playback Volume',index=3 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=21,iface=MIXER,name='Multi Playback Volume',index=4 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=22,iface=MIXER,name='Multi Playback Volume',index=5 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=23,iface=MIXER,name='Multi Playback Volume',index=6 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=24,iface=MIXER,name='Multi Playback Volume',index=7 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=25,iface=MIXER,name='Multi Playback Volume',index=8 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=26,iface=MIXER,name='Multi Playback Volume',index=9 ; type=INTEGER,access=rw---R--,values=2,min=0,max=96,step=0 : values=0,0 | dBscale-min=-144.00dB,step=1.50dB,mute=0 numid=36,iface=MIXER,name='Multi Track Internal Clock' ; type=ENUMERATED,access=rw------,values=1,items=14 ; Item #0 '8000' ; Item #1 '9600' ; Item #2 '11025' ; Item #3 '12000' ; Item #4 '16000' ; Item #5 '22050' ; Item #6 '24000' ; Item #7 '32000' ; Item #8 '44100' ; Item #9 '48000' ; Item #10 '64000' ; Item #11 '88200' ; Item #12 '96000' ; Item #13 'IEC958 Input' : values=13 numid=37,iface=MIXER,name='Multi Track Internal Clock Default' ; type=ENUMERATED,access=rw------,values=1,items=13 ; Item #0 '8000' ; Item #1 '9600' ; Item #2 '11025' ; Item #3 '12000' ; Item #4 '16000' ; Item #5 '22050' ; Item #6 '24000' ; Item #7 '32000' ; Item #8 '44100' ; Item #9 '48000' ; Item #10 '64000' ; Item #11 '88200' ; Item #12 '96000' : values=8 numid=45,iface=MIXER,name='Multi Track Peak' ; type=INTEGER,access=r-------,values=22,min=0,max=255,step=0 : values=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 numid=38,iface=MIXER,name='Multi Track Rate Locking' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=39,iface=MIXER,name='Multi Track Rate Reset' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=44,iface=MIXER,name='Multi Track Volume Rate' ; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0 : values=48 numid=2,iface=PCM,name='IEC958 CS8427 Error Status' ; type=INTEGER,access=r-------,values=1,min=0,max=255,step=0 : values=23 numid=1,iface=PCM,name='IEC958 CS8427 Input Status' ; type=INTEGER,access=r-------,values=1,min=0,max=255,step=0 : values=67 numid=4,iface=PCM,name='IEC958 Playback Default' ; type=IEC958,access=rw------,values=1 : values=[AES0=0x02 AES1=0x02 AES2=0x00 AES3=0x02] numid=3,iface=PCM,name='IEC958 Playback Mask' ; type=IEC958,access=r-------,values=1 : values=[AES0=0xff AES1=0xff AES2=0xff AES3=0xff] numid=5,iface=PCM,name='IEC958 Playback PCM Stream' ; type=IEC958,access=rw------,values=1 : values=[AES0=0x02 AES1=0x02 AES2=0x00 AES3=0x02] numid=6,iface=PCM,name='IEC958 Q-subcode Capture Default' ; type=BYTES,access=r-------,values=10 : values=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0 0,0x00 |
|
|
|
#705 |
|
diyAudio Member
Join Date: Apr 2005
Location: Pilsen
|
Mark,
Thanks for the info. Alsa driver for ICE1712 defines a single 10-channel playback device (see aplay -l). This device is dealt with in /usr/share/alsa/cards/ICE1712.conf. It defines "virtual" devices: default - 10 channels, dmix (i.e. software mixer) front - 2 channels, look at how the configuration picks up the first 2 channels (route/ttable) surround4.0, surround5.1 - again using route/ttable iec958 - or spdif (alias) - route plugin pícks up the last 2 channels (nb. 8,9). This fits the description of the chip in my previous post. Output of amixer contents looks all right, except for the "Multi Track Internal Clock" value. Currently, it is set to Item #13 'IEC958 Input'. Since you are feeding your card with no SPDIF input signal, it is very likely your card chip has no clock signal - not running at all. Use alsamixer to change the control to some real sample rate. If you want to check that each of the channel of the 10-channel output device is output separately, you can try speaker-test -D plughw:0 -c 10 The last two channels should be right/left channels of the SPDIF output. If you want to output to spdif, you can: * use the "spdif" device, or * reconfigure the digital mixer to take the first two channels as a default output of most applications (H/W Multi Capture Switch 0,1 = on) at volume 100% (H/W Multi Capture Volume 0,1 = 96) and output the mixer result to SPDIF output (IEC958 Playback Route 0,1 = Item #11 'Digital Mixer'), or * create your own .asoundrc file redefining the "default" device to use the route plugin to output full volume of the first two channels to the last two channels, i.e. effectively the same result as the above solution, just using alsa routing instead of the ice1712 digital mixer routing. This should preserve the dmix functionality. Or * create your own .asoundrc file re-defining the "default" device with the "spdif" device. That will skip the mixing capability, on the other hand you may not want another application killing your DD/DTS passthrough signal by mixing/adding PCM data. Have fun, you have a powerfull and well-documented HW to play with
|
|
|
|
#706 |
|
diyAudio Member
Join Date: Sep 2006
|
Ah-hah
I am now listening to music played from Audacious through Alsamixer out via SPDIF into my Buffalo, upsampled to 24/96 before leaving the computer. I am aware this is not the low latency, bit perfect ideal, but it is a positive step forward, and does sound good. Thanks for your help guys. Mark |
|
|
|
#707 |
|
diyAudio Member
Join Date: Apr 2005
Location: Pilsen
|
Mark,
Congratulations. Now only brighter future ahead ![]() Just for clarification. Alsamixer is not in the signal path of your audio data. It's name may suggest it resembles the infamous windows kmixer. It is only one of the tools to manipulate controls defined by the card driver. Just as other general purpose tools (amixer, kmix), or the ice1712-specific envy24control. |
|
|
|
#708 |
|
diyAudio Member
Join Date: Mar 2008
|
I just wanted to share my experience with getting my new music server (running Music Player Daemon) on my newly acquired PC Engines ALIX 3c2 single board computer. Maybe someone would be interested in the same. I was actually shocked that using USB as a transport would sound better than my trusty Theta Data Basic transport. My original intentions were to use a PC as a transport for music playing when I was cooking. The ALIX as a Linux USB computer transport is now my primary digital source.
This new system has been up and running for the last six moths with nary a hiccup. So, my first foray with Linux in my audiophile system is when I originally had MPD (MPD: Music Player Daemon) up and running on a Dell GX110 (P3 733Mhz ,128MB RAM) computer I had found in the trash. The old PC sat in the corner of my listening room serving up FLAC via USB to a USB DAC. There were several reasons for wanting to replace this unit: It was a very ugly beige. It drew almost 49 watts from the outlet, according to my Kill-A-Watt meter. (Electricity is very expensive in NYC these days) Most importantly, with two fans, it was loud. The machine had a very audible high pitched whine that I could easily hear when listening to classical music. I wanted something silent, small, very energy efficient, and relatively inexpensive. I have been happily using a PC Engines WRAP SBC (single board computer) that is running Monowall firewall software for the last couple of years, and was happily surprised to see that their new ALIX offerings based on AMD's Geode low power CPUs were sporting USB ports. The Alix SBC has a 500 MHz AMD Geode LX800 CPU, 2 mini-PCI, 1 serial, 1 ethernet, 256MB RAM, and two USB ports. The whole unit, in it's case, is approx. 8x5x2 and runs on a small 12 volt, 12 watt adapter. The board was $125 USD from Netgate. Links: http://www.pcengines.ch/alix3d2.htm http://www.pcengines.ch/pic/box2c2.jpg http://www.pcengines.ch/pic/box2c1.jpg After a little bit of research I found out that there is a distribution called Voyage Linux. Basically a stripped down Debian for embedded machines that keeps Debian's apt package manager. It can be installed on a compact flash as small as 128MB, though they recommend a larger CF for installing applications. This unique combination makes it very easy to install software on embedded hardware; "apt-get install mpd alsa" was all that was needed to get the software up an running. After a quick note to the developers they were more than happy to send me a kernel compiled with sound, USB, and ALSA modules --their standard kernels compiled with firewall and wireless networking in mind. (Once I had everything up a and running smoothly and notified the Voyage developers they agreed to enable USB sound and ALSA in their next releases.) Voyage kernels have USB sound modules and ALSA compiled in by default now. After I set up Voyage Linux on a 512MB partition on a spare CF card, installed the kernel and ALSA debs, apt-getted the MPD and ALSA packages, and set up my bedroom desktop to export my music files via NFS, I was up and running. MPD works beautifully with no clicks, skips, or pauses. Files are buffered 100% to RAM before play. I control it over WiFi with a Thinkpad on the couch via GMPC. Top shows no more than 8% load. The unit draws no more than 3 watts from the outlet. Even though it fetches FLAC files via NFS, changing songs is almost instantaneous. Audio is via USB to a Trends Audio UD-10 feeding a Meridian 518 (jitter correction), which then connects to my trusty Adcom GDA-700 HDCD DAC. I do have a Wavelength Audio Brick (running USB asynchronous mode) on the way. I currently control MPD from the listening position from using either a Nokia N800 handheld tablet or a Thinkpad X40 sub-notebook. I have not tried recompiling the kernel to play with different latency timings. When I have time in the future I'll look into it. Disclaimer: No affiliation to PC Engines. Just a happy customer. |
|
|
|
#709 |
|
diyAudio Member
|
nyc_paramedic:
Great job! Nowadays you can control MPD even with an I-Pod/I-Phone.
__________________
::: Squeezebox Touch Toolbox and more ::: by soundcheck |
|
|
|
#710 | |
|
diyAudio Member
|
Quote:
Are you telling us that upsampling to 24/96 on the PC improved the sound, when played back via the Buffalo?
__________________
::: Squeezebox Touch Toolbox and more ::: by soundcheck |
|
|
![]() |
| Thread Tools | Search this Thread |
|
|
| New To Site? | Need Help? |