8 channel LPCM over HDMI, It's Multi Amp for Everyone

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
everything is trade-off, now my FIR engine only outputs to extended WAV File, but there are pros.

Pros: simple program development and separation, and machine separation, player free.
Cons: Disc area, FIR Parameter changes = reconversion.

1TB is enough to keep hundreds of CD, and only some seconds per music, also I can do batch conversion.

FIR engine is working on my main PC, with GTX280(noisy but crazy fast, and double precision possible - now studying CUDA 2.0 ), then WAV files are stored to NAS.

Audio PC(fanless) reads & play, now I have USB-I2S mode(my own player) and HDMI(Windows Media Player).

I'm thinking to buy fanless 8600GTS - and lower clocked - for Audio PC, to convert in real-time.
DirectSound programming is required and it's quite confusing.
But studying DirectSound is better than studying to make some "plug-in" for foobar, etc.

so..
File: simple program, double precision, x4 area of disc, configurable. (my config is 2PC and NAS).
Streaming: can be "Generic Crossover" device, single precision, difficult programming.
 
soundcheck said:
OK. Now I understand. You're converting all your files non-realtime. But earlier, before HDMI, you were running realtime conversion, right?

I think it is easier to have a look at the ALSA API or JACK API.
You don't need Directsound in Linux.

Did you have a look at the Brutefir ALSA/Jack output module.
The code is available it's opensource. This might help.

No, I'm not running realtime. Also I separated converter and Player, for my USB-I2S. Keep It Simple for Stupid me.

ALSA or JACK - did you try 8 channel HDMI playback on them?
(the wave file I made is for other people testing other environment)
 
flshzug said:
it is using the VSTi protocol.

I got a sample of DirectSound and found, 80% of codes are used for mmio, 3D effect, which I don't need. remaining Dsound initialize / buffer copy / play / circulating buffer are simple enough:)

and I looked MyEQ VST plugin source code.
Too Huge! I can not understand :(

also I'm sorry I don't like huge C++ source code which has many platform switching.:dead:
 
Studying PortAudio see http://www.portaudio.com/

I recommend PortAudio for all of DIYAudio programmer.

PortAudio is open source, MIT-license portable cross-platform Audio API. For example, wave editor 'Audacity' is using PortAudio.

PortAudio works with...
Windows ASIO, MME, DirectSound
Mac Core Audio
Linux (Alsa/Jack/OSS)
maybe 99.999% of audio platform :)

Programming is really simple.
(1) Intialize, Create, Open, Start Stream
(2) write stream Loop, memcpy from main buffer to stream buffer
(3) Stop, Close, terminate.
That's all. unbelievable.

Studying
(a) build: Done.
needs ASIO SDK, DirectX 9.0 SDK, Windows Platform SDK.
(b) test: Done. sine wav generation
(c) Play stereo wav file: Done.
http://koonlab.com/MultiChannelI2S/WavXPlayer.cpp.txt
I just changed this player's USB section to PortAudio, below 100 lines.

(d) Play 8ch wav file: will try this weekend?
(e) FIR Converter output to stream: next week?
(f) input stream, FIR converter, output stream: next-next weekend? (so far, 44.1/16 CD player)
 
(d) Play 8ch wav file: Done, Please see bottom of
http://koonlab.com/MultiAmpForEveryone/FIR_HDMI_AVAMP.html

Now we have simple command line - LPCM 8CH Wave file player. There are a little platform dependance? but maybe easy to port to another platform.

Thanks a LOOOOT to PortAudio.

Next I will try to add output , then input streaming to my FIR Converter. Please wait for next weekend :)

==================

BTW
I can make "NO-GPU" version straight-through FIR channel Divider (stereo wav to 8ch wav). Anyone want it?
it will take 30 minutes to convert 3 minutes music,
but simple to compile and platform (maybe) free.
 
Thanks fb,
pls let me redefine this thread..
by the way I read this idea from soundcheck thread, maybe this spring, and last month I found AVforum thread - then bought HDMI mobo.

Q: What is the most Simple and Beautiful, Multi Amp system?
A: PC with HDMI mobo + AV AMP.
What only special you need is, 8ch LPCM WAVE (crossovered) source file.
I used Windows Media Player, it can play 8ch LPCM.

Q: How to get 8ch LPCM WAVE (crossovered)?
A: I'm using CUDA GPU FIR.


So we already have at least one answer.
I looked "Audio API" and maybe PortAudio is most simple and portable.
as optional,
>SoundCheck wants Linux playback.
FIR Engine: My GPU was not ported yet, but CUDA can run on Linux. or SoundCheck has bruteFIR.
Player: LPCM 8ch player by PortAudio, done. It (may be) portable.

>tschanrm, phofman, fb look like want to have "streaming".
Streaming looks also interesting for me. now I'm trying.

Next: Generic "Crossover" device, which get CD player input / process full digital FIR / multi digital output on HDMI.
This device can be constructed < $1,000 :)
 
Attached is "Linear Buffer" version, Stream output mode GPU FIR crossover. Now I can play regular stereo wave file - my GPU FIR - PortAudio DirectSound LPCM output.

(code is dirty, just testing)
next: "Continuous" mode for SPDIF input, requires ring buffering.

>Soundcheck
Is that blog talking about protected contents?
no relation to this thread?

btw I looked nVidia driver download, and there are no GeForce 8200 Mobo driver for Linux. you have to wait for other solution?
 

Attachments

  • wavex02_linearpaout.cu.txt
    25.2 KB · Views: 56
Koon, some questions/suggestions:

Have you looked into PortAudio's other input output options? On windows it provides ASIO support. This can be used to interface with JACK (http://www.grame.fr/~letz/jackdmp.html) this offers low latency routing flexibility,
eg. from hardware input or software -> FIR engine -> software or hardware output etc.



I notice you are running a geforce 8400 now, capable of 4 way realtime.... What do you anticipate the capabilities of current (GF8200 & 8300) and soon to arrive (GF9300) integrated graphics chips? Is available ram an issue?



Do you think your FIR engine is suitable for a wider range of tasks, similar to bruteFIR? EG. volume, delay, channel summing..... Processing minphase filters for low latency use...... Or perhaps interfacing with JACK would allow other applications to fulfill this purpose?




Thanks for your efforts :)
 
Hi fb,

ASIO: give me ASIO driver for nForce8200:)

GeForce8200, 8300, are just not listed on Cuda programming guide. if 2 or more multiprocessors (16 or more shader processors) available, it can work. but then I will worry about heating issue.
I ordered ASUS EN8600GT silent (with huge cooler fanless), for stable operation.

Volume: already have channel dB offset, (not recommend to rely on as main volume - less bit info)
delay: already implemented, specified by sample count.
channel summing: just get average of specified channels, at result calculation (see source code: end of loop, float to 16bit result calculation) - but how to use on serious audio?
low latency: real FIR requires TAPS, 8192TAPS is about 185ms.
more shorter, less filter accuracy. I want to have a "laser sharp" cutoff slope:)
 
KOON3876 said:
Hi fb,

ASIO: give me ASIO driver for nForce8200:)


http://www.asio4all.com/ ?
But what I was more interested in is that JACK provides JackRouter.dll, an ASIO driver. JACK then provides routing flexibility, and itself uses PortAudio for I/O. -> output to WDM, DS, ASIO (asio4all if you want).

My testing setup currently (WinXP):
I have JACK set to use PortAudio with the ASIO driver for my MOTU soundcard. PortAudio exposes all 10 inputs and 14 outputs to JACK, which can be freely routed with negligable latency.

GeForce8200, 8300, are just not listed on Cuda programming guide. if 2 or more multiprocessors (16 or more shader processors) available, it can work. but then I will worry about heating issue.
I ordered ASUS EN8600GT silent (with huge cooler fanless), for stable operation.
CUDA enabled GPU products lists them: http://www.nvidia.com/object/cuda_learn_products.html
Not sure how much power they have?

Volume: already have channel dB offset, (not recommend to rely on as main volume - less bit info) delay: already implemented, specified by sample count. channel summing: just get average of specified channels, at result calculation (see source code: end of loop, float to 16bit result calculation) - but how to use on serious audio?
I guess I envision some sort of modular connection, enables much more than just stereo crossovers. No doubt much more difficult to program! I will investigate the possibility of mini-applications with JACK.


low latency: real FIR requires TAPS, 8192TAPS is about 185ms. more shorter, less filter accuracy. I want to have a "laser sharp" cutoff slope:)

So do I :) I understand that real FIR requires this. It would be nice to also have the option for lower latency, lower quality filters for applications that are more responsiveness dependant (ie. music production).
 
ASIO4ALL:
I tried to use PaAsioStreamInfo, but error -9864. :(
maybe I should go ahead with PaWinDirectSoundStreamInfo.

GeForce8200 (on MotherBoard) looks like 1.3 version CUDA available GPU, but small memory size.
Some cuda app, like montecarlomultiGPU fails.
Also It's safe to use other GeForce8400 / 8600 board.

So I go ahead with PaWinDirectSound + GeForce8600.
(they are not a "core" issue, you can try and think later)
 
Output Buffer format was changed to Float
(is same as CUDA buffer, easy to copy)
and source code organized to implement ring buffer / stream input.

Video Card was changed to GeForce 9500GT,
An externally hosted image should be here but it was not working when we last tested it.

very cool!

Athlon BE 2350 + Sythe "Orochi" fanless cooler,
400W Zen Fanless,
MSI N9500GT MD512Z fanless,
MSI K9N2GM

Now I should buy SSD to eliminate HDD noise :)

total watt = 76W at FIR running, by "Kill a Watt" tester from cyberguys.com
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.