'Linux API/alsa'에 해당되는 글 14건

  1. 2015.05.29 alsa 구조
  2. 2014.11.26 alsa timestamp
  3. 2014.11.26 alsa async
  4. 2014.11.18 alsa debug function
  5. 2014.11.17 ALSA 드라이버 관련
  6. 2014.11.17 alsa 함수 - size / time
  7. 2014.11.03 alsa low latency
  8. 2014.10.24 SALSA - Small ALSA
  9. 2014.10.23 alsa + ffmpeg 벤치마크(?)
  10. 2014.10.21 alsa 패키지 종류
Linux API/alsa2015. 5. 29. 10:47

간만에 ALSA 생각이 나서 검색..



아무튼 대충의 구조는


USER application

ALSA Library

ALSA Kernel Driver

Audio Driver

Hardware


이런식?




[링크 : http://www.alsa-project.org/~tiwai/lad2003/lad.html]

'Linux API > alsa' 카테고리의 다른 글

alsa timestamp  (0) 2014.11.26
alsa async  (0) 2014.11.26
alsa debug function  (0) 2014.11.18
ALSA 드라이버 관련  (0) 2014.11.17
alsa 함수 - size / time  (0) 2014.11.17
Posted by 구차니
Linux API/alsa2014. 11. 26. 21:37

'Linux API > alsa' 카테고리의 다른 글

alsa 구조  (0) 2015.05.29
alsa async  (0) 2014.11.26
alsa debug function  (0) 2014.11.18
ALSA 드라이버 관련  (0) 2014.11.17
alsa 함수 - size / time  (0) 2014.11.17
Posted by 구차니
Linux API/alsa2014. 11. 26. 21:32
ALSA에서도 비동기 처리가 가능하다는데.
polling을 쓰라는거 보면 무언가 좀 unsafe 한 부분이 있나 보다 싶긴한데..
공식 문서를 찾아볼 필요가 있을 듯.

[링크 : http://alsa.opensrc.org/HowTo_Asynchronous_Playback]
 

'Linux API > alsa' 카테고리의 다른 글

alsa 구조  (0) 2015.05.29
alsa timestamp  (0) 2014.11.26
alsa debug function  (0) 2014.11.18
ALSA 드라이버 관련  (0) 2014.11.17
alsa 함수 - size / time  (0) 2014.11.17
Posted by 구차니
Linux API/alsa2014. 11. 18. 10:35
alsa의 latency.c를 실행하다 보니
깔끔하게 상태를 출력해주는 녀석이 있어서 찾아보게 됨.

Hardware PCM card 0 'mxs-evk' device 0 subdevice 0
Its setup is:
  stream       : PLAYBACK
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 16000
  exact rate   : 16000 (16000/1)
  msbits       : 16
  buffer_size  : 128
  period_size  : 64
  period_time  : 4000
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 64
  period_event : 0
  start_threshold  : 2147483647
  stop_threshold   : 128
  silence_threshold: 0
  silence_size : 0
  boundary     : 1073741824 


snd_pcm_dump(phandle, output);
snd_pcm_dump(chandle, output);
fflush(stdout); 


[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m___dump.html#...1d8d]

----


  state       : RUNNING
  trigger_time: 2130.83093753
  tstamp      : 2160.96375002
  delay       : 48
  avail       : 16
  avail_max   : 44 

snd_output_t *output = NULL;
err = snd_output_stdio_attach(&output, stdout, 0);
if (err < 0) {
        printf("Output failed: %s\n", snd_strerror(err));
        return 0;
}
 
void showstat(snd_pcm_t *handle, size_t frames)
{
        int err;
        snd_pcm_status_t *status;
        snd_pcm_status_alloca(&status);
        if ((err = snd_pcm_status(handle, status)) < 0) {
                printf("Stream status error: %s\n", snd_strerror(err));
                exit(0);
        }
        printf("*** frames = %li ***\n", (long)frames);
        snd_pcm_status_dump(status, output);
}

[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/_2test_2latency_8c-example.html]  


[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m___dump.html#...a51]
[링크 : http://www.alsa-project.org/alsa-doc/alsa-lib/group___p_c_m___dump.html]

'Linux API > alsa' 카테고리의 다른 글

alsa timestamp  (0) 2014.11.26
alsa async  (0) 2014.11.26
ALSA 드라이버 관련  (0) 2014.11.17
alsa 함수 - size / time  (0) 2014.11.17
alsa low latency  (0) 2014.11.03
Posted by 구차니
Linux API/alsa2014. 11. 17. 17:45

'Linux API > alsa' 카테고리의 다른 글

alsa async  (0) 2014.11.26
alsa debug function  (0) 2014.11.18
alsa 함수 - size / time  (0) 2014.11.17
alsa low latency  (0) 2014.11.03
SALSA - Small ALSA  (0) 2014.10.24
Posted by 구차니
Linux API/alsa2014. 11. 17. 17:41
size는 frame 단위
time은 usec 단위


period던 buffer 던 동일한 단위로 설정이 된다. 

'Linux API > alsa' 카테고리의 다른 글

alsa debug function  (0) 2014.11.18
ALSA 드라이버 관련  (0) 2014.11.17
alsa low latency  (0) 2014.11.03
SALSA - Small ALSA  (0) 2014.10.24
alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
Posted by 구차니
Linux API/alsa2014. 11. 3. 09:06
ALSA 구조(?)상

플레이시에는
사운드 카드로는 링버퍼에 값을 쌓아두고 커널/드라이버에서 일정주기 마다 데이터를 넣어주도록 되어있고

녹음시에는
사운드 카드에서 인터럽트 주기마다 데이터를 받아오도록 되어 있다.

물론 인터럽트가 많아질수록 지연은 짧아지겠지만
인터럽트로 인한 컨텍스트 스위칭의 부하가 많아 지므로 다른 프로세서들이 사용할 가용 cpu 는 줄어들게 되기에
음악 재생시 버퍼 크기 늘림으로 cpu 점유율이 낮아진 것을 봐서
벤치마크 내용과는 달리 임베디드 시스템에서의 적용은 쉽지 않을 것으로 보인다.




Audio Latency
    Programmed delay until data is processed
        Playback latency: buffer size
        Recording latency: period size
    Least full-duplex latency: period size x 2

System Latency
    Delay of system response
        Interrupt -> Wake-up
    Must not greater than buffer size
        Buffer underflow, overflow

[링크 : http://www.alsa-project.org/~tiwai/suselabs2003-audio-latency.pdf
[링크 : http://www.alsa-project.org/main/index.php/Low_latency_howto]

---
2014.11.13
[링크 : https://wiki.kldp.org/HOWTO/html/MIDI-HOWTO/x88.html
[링크 : http://www.gardena.net/benno/linux/audio/]

 http://elinux.org/images/8/82/Elc2011_lorriaux.pdf
 http://pyalsaaudio.sourceforge.net/terminology.html

'Linux API > alsa' 카테고리의 다른 글

ALSA 드라이버 관련  (0) 2014.11.17
alsa 함수 - size / time  (0) 2014.11.17
SALSA - Small ALSA  (0) 2014.10.24
alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
Posted by 구차니
Linux API/alsa2014. 10. 24. 13:50
ALSA 홈페이지 뒤지다가 발견한 꽃 같은 녀석!
cpu 점유율은... cpu가 구려서 top 만 돌려서 힘들어 하는 녀석이라
비교하긴 힘들지만.. 5~10% 정도는 Mplayer 최대 부하 걸리는 녀석이 아니면 떨어트려 주는 듯

SALSA-Lib - Small ALSA Library
==============================

GENERAL
-------

SALSA-Lib is a small, light-weight, hot and spicy version of the ALSA
library, mainly for embedded systems with limited resources.
The library is designed to be source-level compatible with ALSA
library API for limited contents.  Most of function calls are inlined,
and accesses directly to the hardware via system calls.
Some components like ALSA sequencer aren't supported, and most of all,
the alsa-lib plugins and configurations are completely dropped.  Thus,
neither dmix nor format conversion is available with SALSA-lib.

CROSS-COMPILATION
-----------------

For compiling the library with a cross compiler, run like the
following:

% CC=arm-linux-gcc \
  ./configure --target=arm-linux --host=i686-linux

Don't forget to add "-linux" to the host option value.  Otherwise
configure script won't detect the host type correctly, and the shared
library won't be built properly.
[링크 : http://ftp://ftp.suse.com/pub/people/tiwai/salsa-lib/README] 

[링크 : http://www.alsa-project.org/main/index.php/ALSA_Library_API]
[링크 : http://www.alsa-project.org/main/index.php/SALSA-Library] << SALSA
[링크 : http://ftp://ftp.suse.com/pub/people/tiwai/salsa-lib/]


귀찮으면 --enable-everything 끗 ㅋㅋㅋ
$ ./configure --help
`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/bin', `/usr/lib' etc.  You can specify
an installation prefix other than `/usr' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-shared[=PKGS]  build shared libraries [default=yes]
  --enable-static[=PKGS]  build static libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --disable-pcm           disable PCM interface
  --disable-mixer         disable mixer interface
  --enable-rawmidi        enable rawmidi interface
  --enable-hwdep          enable hwdep interface
  --enable-timer          enable timer interface
  --enable-conf           enable dummy conf functions
  --enable-seq            enable seq functions
  --enable-tlv            enable TLV (dB) support
  --disable-user-elem     disable user-space control element support
  --enable-async          enable async handler support
  --enable-libasound      build a ABI-compatible libasound.so
  --disable-deprecated    don't mark deprecated attribute for non-working
                          functions
  --enable-output-buffer  support the string output via snd_output_*()
                          functions
  --disable-delight-valgrind
                          do not initialize unnecessary fields for ioctls
  --disable-symbolic-functions
                          use -Bsymbolic-functions option if available
                          (optmization for size and speed)
  --enable-float          support floatin-point unit
  --disable-4bit          drop the support for 4bit PCM (IMA ADPCM)
  --enable-abicheck       enable library ABI check
  --enable-everything     enable everything :)

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]      include additional configurations [automatic]
  --with-compat-version=VERSION
                          specify the compatible version with ALSA-lib
                          (default=1.0.25)
  --with-alsa-devdir=dir  directory with ALSA device files (default /dev/snd)

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor
  CXX         C++ compiler command
  CXXFLAGS    C++ compiler flags
  CXXCPP      C++ preprocessor
  F77         Fortran 77 compiler command
  FFLAGS      Fortran 77 compiler flags

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider. 
 

'Linux API > alsa' 카테고리의 다른 글

alsa 함수 - size / time  (0) 2014.11.17
alsa low latency  (0) 2014.11.03
alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
Posted by 구차니
Linux API/alsa2014. 10. 23. 17:04
buffer / period 값에 따라서 cpu 점유율이 천차만별이다.
call을 얼마나 하는지 이런건 한번 프로파일링 하던가 해봐야 할 듯

ARM926 / 454MHz

period_size: 8
buffer_size: 2040

period_size: 2048
buffer_size: 16384


cpu 점유율 20% 하락 효과 ㄷㄷ 

'Linux API > alsa' 카테고리의 다른 글

alsa low latency  (0) 2014.11.03
SALSA - Small ALSA  (0) 2014.10.24
alsa 패키지 종류  (0) 2014.10.21
alsa 버전확인하기  (0) 2014.10.16
alsa 프로그래밍 정리  (0) 2014.09.18
Posted by 구차니
Linux API/alsa2014. 10. 21. 12:22
머가 이리 많아! 라고 멘붕중이지만..
Driver는 말그대로 Kernel에 들어가는 Driver (snd / soundcore.ko ?)
Firmeware는 사운드 카드에 들어가는 펌웨어(이건 웬지 더 쓸일이 없어 보이네)
library는 libasound.so 사용자 라이브러리(1.0.28에서 memory leak 해결된 부분이 있다고 함
util은 검증용 같고..
tools는 mixer등의 도구들

PackageStable Release

(2012-01-25)

Development ReleaseDescription
Driver (alsa-driver) 1.0.25 none Kernel drivers
Firmware alsa-firmware) 1.0.28 none Firmware for cards that require it
Library (alsa-lib) 1.0.28 none Userspace library
Plugins (alsa-plugins) 1.0.28 none Additional library plugins Eg.jack, pulse, maemo ...
Utilities (alsa-utils) 1.0.28 none Utilities aplay,arecord,amixer etc
Tools (alsa-tools) 1.0.28 none Tools
PyALSA (pyalsa) 1.0.26 none Python bindings for ALSA lib
OSS compat lib (alsa-oss) 1.0.28 none OSS compatibility library

[링크 : http://www.alsa-project.org/main/index.php/Download]

'Linux API > alsa' 카테고리의 다른 글

SALSA - Small ALSA  (0) 2014.10.24
alsa + ffmpeg 벤치마크(?)  (0) 2014.10.23
alsa 버전확인하기  (0) 2014.10.16
alsa 프로그래밍 정리  (0) 2014.09.18
alsa proc file system  (0) 2014.09.16
Posted by 구차니