๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[๋ฆฌ๋ˆ…์Šค ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด์™€ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Raspberry Pi

[๋ฆฌ๋ˆ…์Šค ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ] ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด์™€ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด

์ง•์ง•์•ŒํŒŒ์นด 2024. 2. 13. 00:36
728x90
๋ฐ˜์‘ํ˜•

<์„œ์˜์ง„ ๋‹˜์˜ ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท์„ ์œ„ํ•œ ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

โญ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด

์ธ๊ฐ„์ด ์˜ค๊ฐ์œผ๋กœ ์ธ์‹ํ•˜๋Š” ์—ฌ๋Ÿฌ ๋งค์ฒด๋“ค์˜ ํ˜ผํ•ฉ์„ ์˜๋ฏธ

'๋งŽ์€', '๋‹ค์–‘ํ•œ' ์ด๋ผ๋Š” ๋œป์„ ๊ฐ€์ง„ ๋ฉ€ํ‹ฐ (Multi) ์™€ ์ „๋‹ฌ ๋“ฑ์˜ ์ˆ˜๋‹จ, ๋ฐฉ๋ฒ•, ๋งค์ฒด ๋“ค์„ ๋œปํ•˜๋Š” ๋ฏธ๋””์–ด (Media) ์˜ ํ•ฉ์„ฑ์–ด

 

์ธ๊ฐ„์€ ๊ฐ๊ฐ๊ธฐ๊ด€์„ ์ด์šฉํ•ด์„œ ์†Œ๋ฆฌ, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„๋“ค์ด๊ธฐ ์œ„ํ•ด ๋ˆˆ, ๊ท€, ์ฝ”, ํ˜€, ํ”ผ๋ถ€ ์˜ ์˜ค๊ฐ์„ ์‚ฌ์šฉํ•œ๋‹ค

์ธ๊ฐ„์˜ ๊ฐ๊ฐ๊ธฐ๊ด€์„ ํ†ตํ•ด์„œ ์ธ์‹๋˜๋Š” ์ •๋ณด๋ฅผ ๋ฏธ๋””์–ด๋ผ๋Š” ๋‹จ์–ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

 

๋””์ง€ํ„ธ ๋ฏธ๋””์–ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฏธ๋””์–ด๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์Œ์„ฑ, ์†Œ๋ฆฌ, ๋ฌธ์ž, ๊ทธ๋ฆผ, ๋™์˜์ƒ ๋“ฑ์˜ ๋ฏธ๋””์–ด๊ฐ€ ํ˜ผํ•ฉ๋œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ์ด๋ฅผ ๋ฉ€ํ‹ฐ ๋ฏธ๋””์–ด ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

๋””์ง€ํ„ธ ๋ฏธ๋””์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ฏธ๋””์–ด ์ค‘์—์„œ๋„ ์ฃผ๋กœ ์‹œ๊ฐ๊ณผ ์ฒญ๊ฐ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค

 

โญ ์ƒ‰์ƒ ์ฒด๊ณ„

์ƒ‰์ƒ์€ ๋น›์ด ๋ฌผ์ฒด์— ์˜ํ•ด์„œ ๋ฐ˜์‚ฌ๋˜์–ด์„œ ์‚ฌ๋žŒ์˜ ๋ˆˆ์— ๊ด€์ฐฐ๋œ ๋น›์˜ ํŒŒ๋™์„ ์˜๋ฏธํ•œ๋‹ค

์ž์—ฐ๊ณ„์—์„œ ์กด์žฌํ•˜๊ณ  ์žˆ๋Š” ์ƒ‰์ƒ์„ ์ปดํ“จํ„ฐ, ๋ชจ๋‹ˆํ„ฐ, ์ปฌ๋Ÿฌ ํ”„๋ฆฐํ„ฐ ๋“ฑ ์žฅ๋น„๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค

์ด๋Ÿฌํ•œ ์ƒ‰์ƒ๋“ค์„ ํ‘œํ˜„ํ•˜๊ณ ์ž ์—ฌ๋Ÿฌ ์ƒ‰์ƒ ๋ชจ๋ธ๋“ค์ด ๋งŒ๋“ค์–ด์ก‹์ง€๋งŒ, ๊ฐ ๋ชจ๋ธ๋ณ„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ‰์ƒ์˜ ๋ฒ”์œ„์— ์ œํ•œ์ด ์žˆ๋‹ค

 

๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋‹ˆํ„ฐ (RGB ๋ชจ๋“œ)์™€ ์ธ์‡„๋ฌผ (CMYK ๋ชจ๋“œ) ์€์ƒ‰์ƒ ํ‘œํ˜„ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผํ•˜๊ฒŒ ํ‘œํ˜„๋˜์ง€ ์•Š๋Š”๋‹ค

์ƒ‰์ƒ, ์ฑ„๋„, ๋ช…๋„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ HSI ์ƒ‰์ƒ ๋ชจํ˜•์€ ์˜์ƒ ์ฒ˜๋ฆฌ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค

์˜์ƒ ์ž…๋ ฅ ๋””๋ฐ”์ด์Šค๋Š” YUV ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์˜์ƒ์˜ ์••์ถ•์— ๋งŽ์ด์‚ฌ์šฉ๋˜๋Š” JPEG, MPEG ๊ฐ™์€ ์ฝ”๋ฑ์—์„œ๋„ YUV๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

 

โ˜‘๏ธ RGB ์ƒ‰์ƒ ๋ชจ๋ธ

๋น›์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” RGB ์ƒ‰์ƒ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ๋นจ๊ฐ„์ƒ‰, ์ดˆ๋ก์ƒ‰, ํŒŒ๋ž€์ƒ‰ ์˜ ์„ธ ๊ฐ€์ง€ ์ƒ‰์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค

์ด๋ฅผ ๋น›์˜ ์‚ผ์›์ƒ‰ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

์ปดํ“จํ„ฐ์ƒ์˜ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ƒ‰์ƒ ๋ชจ๋ธ์ด๋ฉฐ, ๋ชจ๋‹ˆํ„ฐ๋‚˜ ์˜ํ™”๊ด€ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋น›์˜ ํ˜ผํ•ฉ์„ ์œ„ํ•œ ์ƒ‰์ƒ ๋ชจ๋ธ์ด๋‹ค

 

โ˜‘๏ธ CMY/CYMK ์ƒ‰์ƒ ๋ชจ๋ธ

์ฒญ๋ก์ƒ‰, ์žํ™์ƒ‰, ๋…ธ๋ž‘์ƒ‰์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด๋ฅผ ์ƒ‰์˜ ์‚ผ์›์ƒ‰ ์ด๋ผ ๋ถ€๋ฅธ๋‹ค

์„ธ ๊ฐ€์ง€ ์ƒ‰์„ ๋ชจ๋‘ ํ•ฉํ•˜๋ฉด ๊ฒ€์€์ƒ‰์ด ๋‚˜์™€์•ผ ํ•˜์ง€๋งŒ, ์‹ค์ œ์ ์œผ๋กœ ์ง„ํ•œ ํšŒ์ƒ‰์ด ๋‚˜์˜ค๋ฏ€๋กœ ๊ฒ€์ •์ƒ‰์„ ์ถ”๊ฐ€ํ•ด์„œ CYMK ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ๋‹ค

 

โ˜‘๏ธ HSI/HSV ์ƒ‰์ƒ ๋ชจ๋ธ

์ƒ‰์ƒ, ์ฑ„๋„, ๋ช…๋„ ์˜ ์„ธ ๊ฐ€์ง€๋ฅผ ์ด์šฉํ•ด์„œ ์˜์ƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

์ƒ‰์ƒ์€ ์ƒ‰์ƒ ๋ชจ๋ธ์˜ ์ƒ‰์œผ๋กœ ๋‹ค์–‘ํ•œ ํŒŒ์žฅ์ด ๊ด€์ธก์ž์—๊ฒŒ์„œ ๋Š๊ปด์ง€๋Š” ๋Š๋‚Œ

์ฑ„๋„๋Š” ๋ฐฑ์ƒ‰์œผ๋กœ ํฌ์„๋˜์ง€ ์•Š๋Š” ์ƒ‰๊น”์˜ ์ •๋„ (์ˆœ์ˆ˜์„ฑ, ํƒํ•œ ์ •๋„)

๋ช…๋„๋Š” ๋น›์ด ๋ฌผ์ฒด์— ๋ฐ˜์‚ฌ๋˜์–ด ๋Š๊ฒจ์ง€๋Š” ๋ฐ๊ธฐ์˜ ๊ฐ•๋„

 

โ˜‘๏ธ YUV ์ƒ‰์ƒ ๋ชจ๋ธ

์ƒ‰์ƒ ๊ณต๊ฐ„์€ ์ปฌ๋Ÿฌ TV ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ƒ‰ ํ‘œํ˜„ ๋ฐฉ์‹์œผ๋กœ YUV, YIQ ๋Š” ์•„๋‚ ๋กœ๊ทธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  YCbCr ์€ JPEG/MPEG ์ฝ”๋ฑ์ด๋‚˜ ๋””์ง€ํ„ธ ๋ฐฉ์†ก์—์„œ ์‚ฌ์šฉํ•œ๋‹ค

Y๋Š” ๋ฐ๊ธฐ ์ •๋„์ธ ํœ˜๋„

IQ/UV/CrCb๋Š” ๋น„๋””์˜ค ์‹ ํ˜ธ์˜ ์ƒ‰์ƒ ์ •๋ณด๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ ์ƒ‰์ƒ ์ด๋ผ ํ•œ๋‹ค

์ปฌ๋Ÿฌ์˜ ํ‘œ์‹œ๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” RGB ์ƒ‰์ƒ ๋ชจ๋ธ์€ ํ‘๋ฐฑ TV ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค

์ด๋ฅผ ์œ„ํ•ด YUV ๋ชจ๋ธ์ด ๋‚˜์˜ด. ์ปฌ๋Ÿฌ ๋ฐฉ์†ก์„ YIQ ๋กœ ์†ก์ถœํ–ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ Y๊ฐ€ ๋ฐ”๋กœ ํ‘๋ฐฑ TV ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ๊ธฐ์™€ ๋™์ผํ•œ ์‹ ํ˜ธ์ด๋ฏ€๋กœ YUV ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‘๋ฐฑ TV ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค

 

โญ ์‚ฌ์šด๋“œ

์†Œ๋ฆฌ๋Š” ์ธ๊ฐ„์ด ๋งํ•˜๋Š” ์Œ์„ฑ์ด๋‚˜ ์•…๊ธฐ๊ฐ€ ๋‚ด๋Š” ์•…๊ธฐ์Œ ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๊ฐ€ ์กด์žฌํ•œ๋‹ค

์†Œ๋ฆฌ๋Š” ๊ณต๊ธฐ ์ž…์ž์˜ ๋ณด์ด์ง€ ์•Š๋Š” ์ง„๋™์œผ๋กœ ์ž”์ž”ํ•œ ์ˆ˜๋ฉด์— ๋Œ์„ ๋˜์กŒ์„ ๋•Œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฒฐ์ฒ˜๋Ÿผ ๊ณต๊ธฐ ์ค‘์—์„œ ํผ์ ธ๊ฐ„๋‹ค

์†Œ๋ฆฌ์˜ ์ „ํŒŒ๋Š” ๊ณต๊ธฐ์˜ ์†Œ๋ฐ€๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์‚ฌ์ธ (sine) ํ˜•ํƒœ์˜ ํŒŒ๋™์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฌํ•œ ํŒŒ๋™์€ ์ฃผํŒŒ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

 

ํŒŒ๋™์˜ ์ฃผํŒŒ์ˆ˜ ์ค‘์— ์ธ๊ฐ„์ด ๋“ค์„ ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์†Œ๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค

์‚ฌ๋žŒ์˜ ์ฒญ๊ฐ ๋ฒ”์œ„ 9๊ฐ€์ฒญ ์ฃผํŒŒ์ˆ˜)๋Š” 20Hz ~ 20KHz

์ผ๋ฐ˜ ์‚ฌ๋žŒ์ด ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์˜ ์ง„๋™ ์ˆ˜๋Š” 1 ~ 3KHz

์‚ฌ๋žŒ์ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ฃผํŒŒ์ˆ˜ ๋Š” 100Hz ~ 6KHz

 

โ˜‘๏ธ ์•„๋‚ ๋กœ๊ทธ / ๋””์ง€ํ„ธ ์‹ ํ˜ธ ๋ณ€ํ™˜

์‹ค์ƒํ™œ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์˜ค๋””์˜ค๋‚˜ ์ด๋ฏธ์ง€์˜ ํ˜•ํƒœ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์‹œ๊ฐ„์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์•„๋‚ ๋กœ๊ทธ ํŒŒ๋™์˜ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค

์ปดํ“จํ„ฐ์—์„œ๋Š” ๋””์ง€ํ„ธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ดํ•ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํ“จํ„ฐ์—์„œ์˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์•„๋‚ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ง€ํ„ธ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค

 

โ˜‘๏ธ ๋””์ง€ํ„ธ ๋ณ€ํ™˜

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์†Œ๋ฆฌ, ์Œ์•…๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋Š” ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ

์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋Š” ๋””์ง€ํ„ธ ์‹ ํ˜ธ์™€๋Š” ๋‹ฌ๋ฆฌ ์‹œ๊ฐ„์— ๋”ฐ๋ผ์„œ ์—ฐ์†์ ์œผ๋กœ ๊ฐ’์ด ๋ณ€ํ™”

๋””์ง€ํ„ธ ์‹ ํ˜ธ๋Š” ์ž‘์€ ๋ฒ”์œ„๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์‹œ๊ฐ„์˜ ์˜์—ญ์—์„œ ์ด์‚ฐ์ ์ธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค

 

์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋ฅผ ๋””์ง€ํ„ธ ์‹ ํ˜ธ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ‘œ๋ณธํ™” (Sampling), ์–‘์žํ™” (Quantization), ๋ถ€ํ˜ธํ™” (Encoding) ์˜ ์„ธ ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค

๋จผ์ € ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋ฅผ ๋””์ง€ํ„ธ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ‘œ๋ณธํ™” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š”๋ฐ, ์‹œ๊ฐ„ ์˜์—ญ (x์ถ•) ์„ ์ผ์ •ํ•œ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ๊ตฌ์—ญ๋งˆ๋‹ค ์‹ ํ˜ธ์˜ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•œ๋‹ค

์–‘์žํ™” ๊ณผ์ •์—์„œ ๊ตฌํ•ด์ง„ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ (y์ถ•)๋ฅผ ๋””์ง€ํ„ธ ๋‹จ์œ„๋กœ ๋ฐ”๊พผ ํ›„, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋””์ง€ํ„ธ ๋‹จ์œ„์˜ ํฌ๊ธฐ๋ฅผ 0๊ณผ 1์˜ ๋ถ€ํ˜ธ (์••์ถ•)๋กœ ์ค„์ด๋Š” ๋ถ€ํ˜ธํ™” ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๋””์ง€ํ„ธ ์‹ ํ˜ธ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค

 

โ˜‘๏ธ ์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ์˜ ๋””์ง€ํ„ธ ๋ณ€ํ™˜

์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ์˜ ํ‘œ๋ณธํ™”๋Š” ์ƒ˜ํ”Œ๋ง ๋ ˆ์ดํŠธ๋ผ๋Š” ์ƒ˜ํ”Œ์˜ ๋‹จ๊ณ„ (๊ฐœ์ˆ˜) ๋ฅผ ๊ตฌํ•˜๋Š” ๋‹จ๊ณ„๋กœ x ์ถ•์˜ ๋‹จ์œ„๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ

์–‘์žํ™”๋Š” y์ถ•์˜ ๋‹จ์œ„๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ๋ณดํ†ต 8๋น„ํŠธ, 16๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ณ ํ’ˆ์งˆ ์˜ค๋””์˜ค๋Š” 24๋น„ํŠธ ์ด์šฉํ•จ

 

โ˜‘๏ธ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์˜ ํ‘œ๋ณธํ™”

์˜์ƒ ์ด๋ฏธ์ง€๋Š” ์Šค์บ๋„ˆ๋‚˜ ๋””์ง€ํ„ธ ๋‚˜๋ฉ”๋ผ์— ์žˆ๋Š” ์ด๋ฏธ์ง€ ์„ผ์„œ๋ฅผ ํ†ตํ•ด์„œ ์ „๊ธฐ์ ์ธ ์‹ ํ˜ธ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค

์ „๊ธฐ์ ์ธ ์‹ ํ˜ธ๋กœ ๋ณ€๊ฒฝ๋œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ง€ํ„ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ํ‘œ๋ณธํ™” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค

ํ‘œ๋ณธํ™” ๊ณผ์ •์—์„œ ์ด๋ฏธ์ง€์˜ ๋ถˆ์—ฐ์†์ ์ธ ์ ์„ ํ”ฝ์…€ (pixel) ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

์ด๋ฏธ์ง€๋Š” 2์ฐจ์›์ ์ธ ๊ตฌ์กฐ๋กœ ์ด๋ค„์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 2์ฐจ์›์ ์ธ ๊ณต๊ฐ„ (x์ถ•๊ณผ y์ถ•) ์„ ๋™์‹œ์— ํ‘œ๋ณธํ™”ํ•ด์•ผ ํ•œ๋‹ค

 

์ „์ฒด ์ด๋ฏธ์ง€์˜ x์ถ•๊ณผ y์ถ•์˜ ํ”ฝ์…€์˜ ํฌ๊ธฐ๋ฅผ ํ•ด์ƒ๋„ (Resolution) ์ด๋ผ ๋ถ€๋ฅธ๋‹ค

ํฐ ํ•ด์ƒ๋„๋ฅผ ๊ฐ€์ง€๋Š” ์ด๋ฏธ์ง€๋Š” ๋” ๋งŽ์€ ์ €์žฅ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•œ๋‹ค

 

โ˜‘๏ธ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์˜ ์–‘์žํ™”

ํ‘œ๋ณธํ™”์—์„œ ์ด๋ฏธ์ง€์˜ ํ•ด์ƒ๋„๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ์–‘์žํ™” ๋‹จ๊ณ„์—์„œ๋Š” ํ”ฝ์…€์˜ ๋ฐ๊ธฐ ๊ฐ’์„ ์–‘์žํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค

๊ฐ ํ”ฝ์…€์— ๋Œ€ํ•œ ์ˆ˜์น˜ ๊ฐ’์€ ์ƒ‰์ƒ์ด ๋˜๋Š”๋ฐ ํ‚ฌ๋Ÿฌ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ RGB ๊ฐ’์ด ๋˜๊ณ , ํ‘๋ฐฑ ์ด๋ฏธ์ง€ ๊ฒฝ์šฐ ๋น›์˜ ๊ฐ•๋„ ์ฆ‰ ๋ฐ๊ธฐ์˜ ๊ฐ’์ด ๋œ๋‹ค

์–‘์žํ™”์—์„œ ๊ฐ๊ฐ์˜ ํ”ฝ์…€์˜ ๋ฐ๊ธฐ ๊ฐ’์œผ๋กœ ์–ผ๋งˆ์˜ ๋น„ํŠธ๋ฅผ ํ• ๋‹นํ•  ๊ฒƒ์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค

ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ‰์ƒ์˜ ์ˆ˜๊ฐ€ 2^G ์ธ ๊ฒฝ์šฐ G๋น„ํŠธ ์–‘์žํ™”๋ผ๊ณ  ํ•œ๋‹ค

 

์–‘์žํ™” ๋‹จ๊ณ„์—์„œ ์ƒ‰์ƒ์˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ์ด์œ ๋Š” ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์กฐ์ •ํ•ด์„œ ์ €์žฅ๋˜๋Š” ์–‘์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค

 

โ˜‘๏ธ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์˜ ๋ถ€ํ˜ธํ™”

์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋Š” ํ•ด์ƒ๋„์™€ ๊ฐ ํ”ฝ์…€์— ํ• ๋‹น๋œ ๋น„ํŠธ ์ˆ˜๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค

์ด๋ฏธ์ง€์˜ ์–‘์žํ™” ๋‹จ๊ณ„๊ฐ€ ๋๋‚˜๋ฉด ๋ถ€ํ˜ธํ™” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค

๋ถ€ํ˜ธํ™”๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฏธ์ง€์—์„œ ์‚ฌ๋žŒ์˜ ๋ˆˆ์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ƒ‰์ƒ ๋งต์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ํ”ฝ์…€์— ๋“ค์–ด๊ฐ€๋Š” ๋น„ํŠธ ์ˆ˜ (์ƒ‰์ƒ์˜ ์ˆ˜)๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค

 

โญ ๋ฆฌ๋ˆ…์Šค ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ

๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ๋Š” ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ œ๊ณตํ•œ๋‹ค

 

โญ ๋ฆฌ๋ˆ…์Šค ์‚ฌ์šด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ปค๋„ ์ˆ˜์ค€์—์„œ ์˜ค๋””์˜ ์ถœ๋ ฅ์„ ์œ„ํ•ด OSS์™€ ALSA ์‹œ์Šคํ…œ์„ ์ง€์›ํ•˜์˜€์œผ๋ฉฐ, 

X ์œˆ๋„์—์„œ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด aRits ๋‚˜ EsounD ๋“ฑ ์‚ฌ์šด๋“œ ์‹œ์Šคํ…œ์—์„œ JACK, PolyAudio ๋กœ ๋ณ€๊ฒฝ๋จ

 

โ˜‘๏ธ ๋ฆฌ๋ˆ…์Šค ์‚ฌ์šด๋“œ ์‹œ์Šคํ…œ

์œ ๋‹‰์Šค์—์„œ๋Š” ํŒŒ์ผ, ๋””๋ ‰ํ„ฐ๋ฆฌ, ๋””๋ฐ”์ด์Šค ๋ชจ๋‘ ๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด์„œ ํŒŒ์ผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค

OSS ๋Š” ๋ฆฌ๋ˆ…์Šค์™€ ์œ ๋‹‰์Šค ํ”Œ๋žซํผ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

ALSA ๋Š” ๊ณ ํ’ˆ์งˆ์˜ ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜์—ฌ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ 2๊ฐœ ์ด์ƒ์˜ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์นญํ˜• ๋‹ค์ค‘์ฒ˜๋ฆฌ (SMP) ์—์„œ์˜ ๋ฌธ์ œ์ ๋“ค์„ ๊ฐœ์„ ํ•จ

ALSA ๋Š” ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” OSS ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ง€์›์„ ์œ„ํ•ด ์• ๋ฎฌ๋ ˆ์ด์…˜ ๋ž˜ํผ (wrapper) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (liboss) ๋ฅผ ์ œ๊ณตํ•œ๋‹ค

๋ฏน์„œ, ์‚ฌ์šด๋“œ ํ”Œ๋ ˆ์ด์–ด ๋“ฑ ๋งŽ์€ ์ฝ˜์†” ๊ธฐ๋ฐ˜์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค

// ALSA ์—์„œ OSS ์‚ฌ์šฉํ•˜๊ธฐ
sudo apt-get install oss-compat alsa-oss

 

โ˜‘๏ธ ALSA ์œ ํ‹ธ๋ฆฌํ‹ฐ

๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ๋œ amizer, alamixer, alsactl, aply ๋“ฑ ๋‹ค์–‘ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค

๋ณผ๋ฅจ์„ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์œผ๋ฉด alsamixer

์˜ค๋””์˜ค ํŒŒ์ผ์„ ์žฌ์ƒํ•˜๊ณ  ์‹ถ์œผ๋ฉด aplay

๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์—์„œ ์‚ฌ์šด๋“œ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด speaker-test

๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด์—์„œ๋Š” ์‚ฌ์šด๋“œ์˜ ์ถœ๋ ฅ๋งŒ์„ ์ง€์›ํ•˜๊ณ  ๋…น์Œ์„ ์œ„ํ•œ ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค๊ฐ€ ์—†๋‹ค

์‚ฌ์šด๋“œ๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šธํ”„์Šจ Pi ์˜ค๋””์˜ค ์นด๋“œ๋‚˜, USB ์‚ฌ์šด๋“œ ์นด๋“œ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค

 

โ˜‘๏ธ ALSA ๊ตฌ์กฐ

๋งŽ์€ ์ข…๋ฅ˜์˜ ์‚ฌ์šด๋“œ ์นด๋“œ๋“ค์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ปค๋„ ๋””๋ฐ”์ด์Šค ๋“œ๋ผ์ด๋ธŒ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค

์ œ์–ด ์ธํ„ฐํŽ˜์ด์Šค: ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋””๋ฐ”์ด์Šค๋“ค์— ๋Œ€ํ•œ ์ •๋ณด ํ‘œ์‹œ๋‚˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋ฉด ์•Œ๋ ค์ฃผ๊ธฐ

PCM ์ธํ„ฐํŽ˜์ด์Šค: ์˜ค๋””์˜ค ์ž…์ถœ๋ ฅ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋””๋ฐ”์ด์Šค

๋ฏน์„œ ์ธํ„ฐํŽ˜์ด์Šค: ์‚ฌ์šด๋“œ ๋ณผ๋ฅจ์˜ ์„ค์ •๊ณผ ์ž…๋ ฅ ๋””๋ฐ”์ด์Šค์˜ ์„ ํƒ ๊ธฐ๋Šฅ ์ œ๊ณต

Raw MIDI ์ธํ„ฐ๋ฒ ์ด์Šค: ๋ฏธ๋”” ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต

ํƒ€์ด๋จธ ์ธํ„ฐํŽ˜์ด์Šค: ์˜ค๋””์˜ค ๋””๋ฐ”์—์Šค์—์„œ ์‚ฌ์šด๋“œ ์ด๋ฒคํŠธ์˜ ๋™๊ธฐํ™”์— ์‚ฌ์šฉ๋˜๋Š” ๋‚ด๋ถ€ ํƒ€์ด๋จธ ์‚ฌ์šฉ

์‹œํ€€์„œ ์ธํ„ฐํŽ˜์ด์Šค: ํด๋ผ์ด์–ธํŠธ์™€ ํฌํŠธ ๊ฐ„์— ๋ฏธ๋”” ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

 

โญ ์‚ฌ์šด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

ALSA ๋Š” ์˜ค๋””์˜ค๋ฅผ ์œ„ํ•œ PCM ๋ฐ์ดํ„ฐ๋ฅผ ๋…น์Œํ•˜๊ณ  ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜๋Š” API ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” asoundlib.h ํ—ค๋” ํŒŒ์ผ์„ ํฌํ•จํ•œ๋‹ค

1. ๋…น์Œ์ด๋‚˜ ์žฌ์ƒ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ด๊ธฐ (snd_pcm_open() ํ•จ์ˆ˜)

2. ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ (์ ‘๊ทผ๋ชจ๋“œ, ๋ฐ์ดํ„ฐ ํฌ๋งท, ์ฑ„์ปฌ, ์ƒ˜ํ”Œ๋ง ๋ ˆ์ดํŠธ) ์„ค์ •ํ•œ๋‹ค

3. ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ ์ค‘์ด๋ผ๋ฉด PCM ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ PCM ๋ฐ์ดํ„ฐ๋ฅผ ์“ด๋‹ค (snd_pcm_writei() ํ•จ์ˆ˜)

4. ์œ„์˜ ๊ณผ์ •์ด ๋ชจ๋‘ ๋๋‚˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ซ๋Š”๋‹ค (snd_pcm_close() ํ•จ์ˆ˜)

// alsapcm.c
#include <stdio.h>              /* perror( ) ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์œ„ํ•ด ์‚ฌ์šฉ */
#include <limits.h>             /* SHRT_MAX ์ƒ์ˆ˜๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉ */
#include <math.h>               /* sin( ) ํ•จ์ˆ˜๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉ */
#include <alsa/asoundlib.h>     /* ALSA ์‚ฌ์šด๋“œ ์‹œ์Šคํ…œ์˜ ํ—ค๋” ํŒŒ์ผ */

#define BITS            2       /* ์ƒ˜ํ”Œ๋‹น 16๋น„ํŠธ์˜ ํฌ๊ธฐ : 2 × 8 = 16bit */
#define FRAGMENT        8
#define DURATION        5.0     /* sec */
#define MODE            1       /* ์ฑ„๋„ ์ˆ˜: mono */
#define FREQ            44100   /* ์ƒ˜ํ”Œ๋ง ๋ ˆ์ดํŠธ */
#define BUFSIZE         (int)(BITS*FREQ*DURATION*MODE)  /* ์œ„์˜ Duration ๊ธฐ๊ฐ„์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํผ์˜ ํฌ๊ธฐ */

int setupDSP(snd_pcm_t *dev, int buf_size, int format, int sampleRate, int channels);

int main(int argc, char **argv)
{
    snd_pcm_t *playback_handle;
    double total = DURATION, t;         /* ์žฌ์ƒ ์‹œ๊ฐ„์€ 5์ดˆ */
    int freq = 440;                     /* ์žฌ์ƒ์Œ์˜ ์ฃผํŒŒ์ˆ˜๋Š” 440Hz(A) */
    int i, frames, count = 1;           /* ๋ฐ˜๋ณต ํšŸ์ˆ˜ */
    char *snd_dev_out = "plughw:0,0";   /* ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค์˜ ์ด๋ฆ„ */
    short buf[BUFSIZE];                 /* ์ž…์ถœ๋ ฅ ์˜ค๋””์˜ค๋ฅผ ์œ„ํ•œ ๋ฒ„ํผ */

    /* ALSA ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค ์—ด๊ธฐ */
    if(snd_pcm_open(&playback_handle, snd_dev_out, SND_PCM_STREAM_PLAYBACK, 0) < 0) {
        perror("Cound not open output audio dev");
        return -1;
    }

    /* ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค ์„ค์ • */
    if(setupDSP(playback_handle, BUFSIZE, SND_PCM_FORMAT_S16_LE, FREQ, MODE) < 0) {
        perror("Cound not set output audio device");
        return -1;
    }

    /* ์ •ํ˜„ํŒŒ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ */
    printf("Make Sine wave!!!\n");
    for(i = 0; i < BUFSIZE; i++) {
        t = (total / BUFSIZE) * i;
        buf[i] = SHRT_MAX * sin((int)(2.0 * M_PI * freq * t));
    }
    frames = BUFSIZE / (MODE * BITS);

    while(count--) {
        /* ์˜ค๋””์˜ค ์ถœ๋ ฅ์„ ์œ„ํ•œ ์ค€๋น„ */
        snd_pcm_prepare(playback_handle);

        /* ์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ๋ฅผ ๋””๋ฐ”์ด์Šค๋กœ ์ถœ๋ ฅ(์“ฐ๊ธฐ) */
        snd_pcm_writei(playback_handle, buf, frames);
    }

    /* ์˜ค๋””์˜ค ๋ฒ„ํผ ๋ฒ„๋ฆฌ๊ธฐ */
    snd_pcm_drop(playback_handle);

    /* ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค ๋‹ซ๊ธฐ */
    snd_pcm_close(playback_handle);

    return 0;
}

int setupDSP(snd_pcm_t *dev, int buf_size, int format, int sampleRate, int channels)
{
    snd_pcm_hw_params_t* hw_params;     /* ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค ์„ค์ •์„ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ */
    snd_pcm_uframes_t frames;           /* ์‚ฌ์šด๋“œ ์นด๋“œ์˜ ๋ฒ„ํผ ํ”„๋ ˆ์ž„ */
    int fragments = FRAGMENT;
    int bits = (format == SND_PCM_FORMAT_S16_LE)?2:1;

    /* ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ตฌ์กฐ์ฒด๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น */
    if(snd_pcm_hw_params_malloc(&hw_params) < 0) {
        perror("Cound not allocate parameter");
        return -1;
    }

    /* ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋“ค์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. */
    if(snd_pcm_hw_params_any(dev, hw_params) < 0) {
        perror("Cound not initialize parameter");
        return -1;
    }

    /* ์˜ค๋””์˜ค ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ(access) ํƒ€์ž…(์ธํ„ฐ๋ฆฌ๋ธŒ๋“œ, ๋…ผ์ธํ„ฐ๋ฆฌ๋ธŒ๋“œ)์„ ์„ค์ •ํ•œ๋‹ค. */
    if(snd_pcm_hw_params_set_access(dev, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
        perror("Cound not set access type");
        return -1;
    }

    /* ์ƒ˜ํ”Œ์˜ ํฌ๋งท์„ ์„ค์ •ํ•œ๋‹ค: ๋ถ€ํ˜ธ ์žˆ๋Š” 16๋น„ํŠธ ๋ฆฌํ‹€ ์—”๋””์•ˆ */
    if(snd_pcm_hw_params_set_format(dev, hw_params, format) < 0) {
        perror("Cound not set sample format");
        return -1;
    }

    /* ์ƒ˜ํ”Œ๋ง ๋ ˆ์ดํŠธ๋ฅผ ์„ค์ •ํ•œ๋‹ค: 44.1KHz(CD ์ˆ˜์ค€์˜ ํ’ˆ์งˆ) */
    if(snd_pcm_hw_params_set_rate_near(dev, hw_params, &sampleRate, 0) < 0) {
        perror("Cound not set sample rate");
        return -1;
    }

    /* ์ฑ„๋„ ์„ค์ •: MONO(1) */
    if(snd_pcm_hw_params_set_channels(dev, hw_params, channels) < 0) {
        perror("Cound not set channel count");
        return -1;
    }

    /* ํ”„๋ ˆ์ž„ ์ฃผ๊ธฐ ์„ค์ • */
    if(snd_pcm_hw_params_set_periods_near(dev, hw_params, &fragments, 0) < 0) {
        perror("Count not set fragments");
        return -1;
    }

    /* ๋ฒ„ํผ์˜ ํฌ๊ธฐ ์„ค์ • */
    frames = (buf_size * fragments) / (channels * bits);
    if(snd_pcm_hw_params_set_buffer_size_near(dev, hw_params, &frames) < 0) {
        perror("Count not set buffer_size");
        return -1;
    }

    buf_size = frames * channels * bits / fragments;

    /* ์•ž์—์„œ ์„ค์ •ํ•œ ์˜ค๋””์˜ค ๋””๋ฐ”์ด์Šค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ALSA ์‹œ์Šคํ…œ์— ์ ์šฉ */
    if(snd_pcm_hw_params(dev, hw_params) < 0) {
        perror("Count not set HW params");
        return -1;
    }

    return 0;
}

/*
์†Œ๋ฆฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถœ๋ ฅ์„ ์œ„ํ•œ ๋ฒ„ํผ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ๋‹ค
ํ•„์š”ํ•œ ๋ฏธ๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋‹ค์Œ์˜ ๊ณต์‹์„ ์ด์šฉํ•ด์„œ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค
์˜ค๋””์˜ค์˜ ํฌ๊ธฐ = ํ‘œ๋ณธํ™”์œจ X ์–‘์žํ™” ๋ˆˆํผ์˜ ํฌ๊ธฐ (๋น„ํŠธ ์ˆ˜) X ๋ชจ๋“œ (๋ชจ๋…ธ/์Šคํ…Œ๋ ˆ์˜ค) X ์‹œ๊ฐ„ (์ดˆ)

PCM ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฒ„์˜ ํฌ๊ธฐ๋ฅผ ๋งคํฌ๋กœ๋กœ ์ •ํฌํ•˜์˜€๋‹ค
์–‘์žํ™” ๋น„ํŠธ 16๋น„ํŠธ, ์ƒ˜ํ”Œ๋ง ์ฃผํŒŒ์ˆ˜ 44.1KHz, ์ฑ„๋„์€ ๋ชจ๋…ธ (1)์„ ์‚ฌ์šฉํ–ˆ๋‹ค
*/

 

728x90
๋ฐ˜์‘ํ˜•
Comments