# ਆਡੀਓ ਕੈਪਚਰ ਕਰੋ - Wio ਟਰਮੀਨਲ ਇਸ ਪਾਠ ਦੇ ਇਸ ਭਾਗ ਵਿੱਚ, ਤੁਸੀਂ ਆਪਣੇ Wio ਟਰਮੀਨਲ 'ਤੇ ਆਡੀਓ ਕੈਪਚਰ ਕਰਨ ਲਈ ਕੋਡ ਲਿਖੋਗੇ। ਆਡੀਓ ਕੈਪਚਰ Wio ਟਰਮੀਨਲ ਦੇ ਉੱਪਰਲੇ ਬਟਨਾਂ ਵਿੱਚੋਂ ਇੱਕ ਦੁਆਰਾ ਨਿਯੰਤਰਿਤ ਕੀਤਾ ਜਾਵੇਗਾ। ## ਡਿਵਾਈਸ ਨੂੰ ਆਡੀਓ ਕੈਪਚਰ ਕਰਨ ਲਈ ਪ੍ਰੋਗਰਾਮ ਕਰੋ ਤੁਸੀਂ ਮਾਈਕਰੋਫੋਨ ਤੋਂ ਆਡੀਓ C++ ਕੋਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕੈਪਚਰ ਕਰ ਸਕਦੇ ਹੋ। Wio ਟਰਮੀਨਲ ਵਿੱਚ ਸਿਰਫ 192KB ਰੈਮ ਹੈ, ਜੋ ਕਿ ਕੁਝ ਸਕਿੰਟ ਤੋਂ ਵੱਧ ਆਡੀਓ ਕੈਪਚਰ ਕਰਨ ਲਈ ਕਾਫ਼ੀ ਨਹੀਂ ਹੈ। ਇਸ ਵਿੱਚ 4MB ਫਲੈਸ਼ ਮੈਮੋਰੀ ਵੀ ਹੈ, ਇਸ ਲਈ ਇਸਨੂੰ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਕੈਪਚਰ ਕੀਤੀ ਗਈ ਆਡੀਓ ਨੂੰ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਵਿੱਚ ਸੇਵ ਕਰਨ ਲਈ। ਬਿਲਟ-ਇਨ ਮਾਈਕਰੋਫੋਨ ਇੱਕ ਐਨਾਲੌਗ ਸਿਗਨਲ ਕੈਪਚਰ ਕਰਦਾ ਹੈ, ਜਿਸਨੂੰ ਡਿਜ਼ਿਟਲ ਸਿਗਨਲ ਵਿੱਚ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ ਜੋ Wio ਟਰਮੀਨਲ ਵਰਤ ਸਕਦਾ ਹੈ। ਜਦੋਂ ਆਡੀਓ ਕੈਪਚਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਡਾਟਾ ਨੂੰ ਸਹੀ ਸਮੇਂ 'ਤੇ ਕੈਪਚਰ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ - ਉਦਾਹਰਨ ਲਈ, ਜੇ 16KHz 'ਤੇ ਆਡੀਓ ਕੈਪਚਰ ਕਰਨਾ ਹੈ, ਤਾਂ ਆਡੀਓ ਨੂੰ ਸਹੀ ਤੌਰ 'ਤੇ 16,000 ਵਾਰ ਪ੍ਰਤੀ ਸਕਿੰਟ ਕੈਪਚਰ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ, ਹਰ ਨਮੂਨੇ ਦੇ ਵਿਚਕਾਰ ਬਰਾਬਰ ਦੇ ਅੰਤਰ ਨਾਲ। ਤੁਹਾਡੇ ਕੋਡ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਬਜਾਏ, ਤੁਸੀਂ ਡਾਇਰੈਕਟ ਮੈਮੋਰੀ ਐਕਸੈਸ ਕੰਟਰੋਲਰ (DMAC) ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ। ਇਹ ਇੱਕ ਸਰਕਟਰੀ ਹੈ ਜੋ ਕਿਸੇ ਸਥਾਨ ਤੋਂ ਸਿਗਨਲ ਕੈਪਚਰ ਕਰ ਸਕਦੀ ਹੈ ਅਤੇ ਮੈਮੋਰੀ ਵਿੱਚ ਲਿਖ ਸਕਦੀ ਹੈ, ਬਿਨਾਂ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਪ੍ਰੋਸੈਸਰ 'ਤੇ ਚਲਾਉਣ ਵਿੱਚ ਰੁਕਾਵਟ ਪਹੁੰਚਾਏ। ✅ DMAC ਬਾਰੇ ਹੋਰ ਪੜ੍ਹੋ [ਵਿਕੀਪੀਡੀਆ ਦੇ ਡਾਇਰੈਕਟ ਮੈਮੋਰੀ ਐਕਸੈਸ ਪੇਜ](https://wikipedia.org/wiki/Direct_memory_access) 'ਤੇ। ![ਮਾਈਕ ਤੋਂ ਆਡੀਓ ADC ਤੋਂ DMAC ਤੱਕ ਜਾਂਦਾ ਹੈ। ਇਹ ਇੱਕ ਬਫਰ ਵਿੱਚ ਲਿਖਦਾ ਹੈ। ਜਦੋਂ ਇਹ ਬਫਰ ਭਰ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਸਨੂੰ ਪ੍ਰੋਸੈਸ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ DMAC ਦੂਜੇ ਬਫਰ ਵਿੱਚ ਲਿਖਦਾ ਹੈ](../../../../../translated_images/dmac-adc-buffers.4509aee49145c90bc2e1be472b8ed2ddfcb2b6a81ad3e559114aca55f5fff759.pa.png) DMAC ਨਿਰਧਾਰਤ ਅੰਤਰਾਲ 'ਤੇ ADC ਤੋਂ ਆਡੀਓ ਕੈਪਚਰ ਕਰ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ 16KHz ਆਡੀਓ ਲਈ ਪ੍ਰਤੀ ਸਕਿੰਟ 16,000 ਵਾਰ। ਇਹ ਕੈਪਚਰ ਕੀਤੇ ਗਏ ਡਾਟਾ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਅਲਾਟ ਕੀਤੇ ਮੈਮੋਰੀ ਬਫਰ ਵਿੱਚ ਲਿਖ ਸਕਦਾ ਹੈ, ਅਤੇ ਜਦੋਂ ਇਹ ਭਰ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਪ੍ਰੋਸੈਸ ਕਰਨ ਲਈ ਉਪਲਬਧ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ ਆਡੀਓ ਕੈਪਚਰ ਕਰਨ ਵਿੱਚ ਦੇਰੀ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਤੁਸੀਂ ਕਈ ਬਫਰ ਸੈਟ ਕਰ ਸਕਦੇ ਹੋ। DMAC ਬਫਰ 1 ਵਿੱਚ ਲਿਖਦਾ ਹੈ, ਫਿਰ ਜਦੋਂ ਇਹ ਭਰ ਜਾਂਦਾ ਹੈ, ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਬਫਰ 1 ਪ੍ਰੋਸੈਸ ਕਰਨ ਲਈ ਸੂਚਿਤ ਕਰਦਾ ਹੈ, ਜਦੋਂ DMAC ਬਫਰ 2 ਵਿੱਚ ਲਿਖਦਾ ਹੈ। ਜਦੋਂ ਬਫਰ 2 ਭਰ ਜਾਂਦਾ ਹੈ, ਇਹ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਸੂਚਿਤ ਕਰਦਾ ਹੈ, ਅਤੇ ਵਾਪਸ ਬਫਰ 1 ਵਿੱਚ ਲਿਖਣ ਲਈ ਜਾਂਦਾ ਹੈ। ਇਸ ਤਰੀਕੇ ਨਾਲ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਹਰ ਬਫਰ ਨੂੰ ਉਸ ਸਮੇਂ ਤੋਂ ਘੱਟ ਸਮੇਂ ਵਿੱਚ ਪ੍ਰੋਸੈਸ ਕਰਦੇ ਹੋ ਜਿੰਨਾ ਸਮਾਂ ਲੱਗਦਾ ਹੈ, ਤੁਸੀਂ ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਗੁਆਓਗੇ। ਜਦੋਂ ਹਰ ਬਫਰ ਕੈਪਚਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਇਸਨੂੰ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਵਿੱਚ ਲਿਖਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਫਲੈਸ਼ ਮੈਮੋਰੀ ਨੂੰ ਨਿਰਧਾਰਤ ਪਤੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਿਖਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਇਹ ਦਰਸਾਉਂਦੇ ਹੋਏ ਕਿ ਕਿੱਥੇ ਲਿਖਣਾ ਹੈ ਅਤੇ ਕਿੰਨਾ ਵੱਡਾ ਲਿਖਣਾ ਹੈ, ਇਹ ਮੈਮੋਰੀ ਵਿੱਚ ਬਾਈਟਸ ਦੇ ਐਰੇ ਨੂੰ ਅਪਡੇਟ ਕਰਨ ਦੇ ਸਮਾਨ ਹੈ। ਫਲੈਸ਼ ਮੈਮੋਰੀ ਵਿੱਚ ਗ੍ਰੈਨੁਲੈਰਿਟੀ ਹੁੰਦੀ ਹੈ, ਜਿਸਦਾ ਅਰਥ ਹੈ ਕਿ ਮਿਟਾਉਣ ਅਤੇ ਲਿਖਣ ਦੀਆਂ ਕਾਰਵਾਈਆਂ ਸਿਰਫ ਨਿਰਧਾਰਤ ਆਕਾਰ ਦੇ ਹੋਣ 'ਤੇ ਹੀ ਨਿਰਭਰ ਕਰਦੀਆਂ ਹਨ, ਪਰ ਉਸ ਆਕਾਰ ਨਾਲ ਸੰਰਖਿਤ ਹੋਣ 'ਤੇ ਵੀ ਨਿਰਭਰ ਕਰਦੀਆਂ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਜੇ ਗ੍ਰੈਨੁਲੈਰਿਟੀ 4096 ਬਾਈਟਸ ਹੈ ਅਤੇ ਤੁਸੀਂ ਪਤਾ 4200 'ਤੇ ਮਿਟਾਉਣ ਦੀ ਬੇਨਤੀ ਕਰਦੇ ਹੋ, ਤਾਂ ਇਹ ਪਤਾ 4096 ਤੋਂ 8192 ਤੱਕ ਸਾਰੇ ਡਾਟਾ ਨੂੰ ਮਿਟਾ ਸਕਦਾ ਹੈ। ਇਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਜਦੋਂ ਤੁਸੀਂ ਆਡੀਓ ਡਾਟਾ ਨੂੰ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਵਿੱਚ ਲਿਖਦੇ ਹੋ, ਤਾਂ ਇਹ ਸਹੀ ਆਕਾਰ ਦੇ ਟੁਕੜਿਆਂ ਵਿੱਚ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ। ### ਕੰਮ - ਫਲੈਸ਼ ਮੈਮੋਰੀ ਨੂੰ ਕਨਫਿਗਰ ਕਰੋ 1. ਇੱਕ ਨਵਾਂ Wio ਟਰਮੀਨਲ ਪ੍ਰੋਜੈਕਟ ਬਣਾਓ ਜੋ ਕਿ PlatformIO ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ। ਇਸ ਪ੍ਰੋਜੈਕਟ ਨੂੰ `smart-timer` ਕਹੋ। `setup` ਫੰਕਸ਼ਨ ਵਿੱਚ ਸੀਰੀਅਲ ਪੋਰਟ ਨੂੰ ਕਨਫਿਗਰ ਕਰਨ ਲਈ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ। 1. ਫਲੈਸ਼ ਮੈਮੋਰੀ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ `platformio.ini` ਫਾਈਲ ਵਿੱਚ ਹੇਠ ਲਿਖੀਆਂ ਲਾਇਬ੍ਰੇਰੀ ਡਿਪੈਂਡੈਂਸੀਜ਼ ਸ਼ਾਮਲ ਕਰੋ: ```ini lib_deps = seeed-studio/Seeed Arduino FS @ 2.1.1 seeed-studio/Seeed Arduino SFUD @ 2.0.2 ``` 1. `main.cpp` ਫਾਈਲ ਖੋਲ੍ਹੋ ਅਤੇ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਲਾਇਬ੍ਰੇਰੀ ਲਈ ਹੇਠ ਲਿਖੀ ਸ਼ਾਮਲ ਕਰਨ ਵਾਲੀ ਡਾਇਰੈਕਟਿਵ ਫਾਈਲ ਦੇ ਉੱਪਰ ਸ਼ਾਮਲ ਕਰੋ: ```cpp #include #include ``` > 🎓 SFUD ਦਾ ਅਰਥ ਹੈ Serial Flash Universal Driver, ਅਤੇ ਇਹ ਇੱਕ ਲਾਇਬ੍ਰੇਰੀ ਹੈ ਜੋ ਸਾਰੇ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਚਿਪਸ ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ ਡਿਜ਼ਾਈਨ ਕੀਤੀ ਗਈ ਹੈ। 1. `setup` ਫੰਕਸ਼ਨ ਵਿੱਚ, ਫਲੈਸ਼ ਸਟੋਰੇਜ ਲਾਇਬ੍ਰੇਰੀ ਸੈਟ ਕਰਨ ਲਈ ਹੇਠ ਲਿਖਿਆ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ: ```cpp while (!(sfud_init() == SFUD_SUCCESS)) ; sfud_qspi_fast_read_enable(sfud_get_device(SFUD_W25Q32_DEVICE_INDEX), 2); ``` ਇਹ SFUD ਲਾਇਬ੍ਰੇਰੀ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਤੱਕ ਲੂਪ ਕਰਦਾ ਹੈ, ਫਿਰ ਤੇਜ਼ ਪੜ੍ਹਨ ਨੂੰ ਚਾਲੂ ਕਰਦਾ ਹੈ। ਬਿਲਟ-ਇਨ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਨੂੰ Queued Serial Peripheral Interface (QSPI) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪਹੁੰਚ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜੋ ਕਿ SPI ਕੰਟਰੋਲਰ ਦੀ ਇੱਕ ਕਿਸਮ ਹੈ ਜੋ ਘੱਟ ਪ੍ਰੋਸੈਸਰ ਦੀ ਵਰਤੋਂ ਨਾਲ ਕਤਾਰ ਰਾਹੀਂ ਲਗਾਤਾਰ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਹ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਨੂੰ ਪੜ੍ਹਨ ਅਤੇ ਲਿਖਣ ਵਿੱਚ ਤੇਜ਼ ਬਣਾਉਂਦਾ ਹੈ। 1. `src` ਫੋਲਡਰ ਵਿੱਚ ਇੱਕ ਨਵੀਂ ਫਾਈਲ ਬਣਾਓ ਜਿਸਨੂੰ `flash_writer.h` ਕਹਿੰਦੇ ਹਨ। 1. ਇਸ ਫਾਈਲ ਦੇ ਉੱਪਰ ਹੇਠ ਲਿਖਿਆ ਸ਼ਾਮਲ ਕਰੋ: ```cpp #pragma once #include #include ``` ਇਹ ਕੁਝ ਲੋੜੀਂਦੇ ਹੈਡਰ ਫਾਈਲਾਂ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਫਲੈਸ਼ ਮੈਮੋਰੀ ਨਾਲ ਸੰਚਾਰ ਕਰਨ ਲਈ SFUD ਲਾਇਬ੍ਰੇਰੀ ਲਈ ਹੈਡਰ ਫਾਈਲ ਸ਼ਾਮਲ ਹੈ। 1. ਇਸ ਨਵੀਂ ਹੈਡਰ ਫਾਈਲ ਵਿੱਚ `FlashWriter` ਨਾਮਕ ਇੱਕ ਕਲਾਸ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ: ```cpp class FlashWriter { public: private: }; ``` 1. `private` ਸੈਕਸ਼ਨ ਵਿੱਚ ਹੇਠ ਲਿਖਿਆ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ: ```cpp byte *_sfudBuffer; size_t _sfudBufferSize; size_t _sfudBufferPos; size_t _sfudBufferWritePos; const sfud_flash *_flash; ``` ... (ਅਗਲੇ ਹਿੱਸੇ ਲਈ, ਜਾਰੀ ਰੱਖਣ ਲਈ ਕਹੋ।) > 💁 ਤੁਸੀਂ ਇਹ ਕੋਡ [code-record/wio-terminal](../../../../../6-consumer/lessons/1-speech-recognition/code-record/wio-terminal) ਫੋਲਡਰ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ। ਤੁਹਾਡਾ ਆਡੀਓ ਰਿਕਾਰਡਿੰਗ ਪ੍ਰੋਗਰਾਮ ਸਫਲ ਰਿਹਾ! --- **ਅਸਵੀਕਰਤੀ**: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚੱਜੇਪਣ ਹੋ ਸਕਦੇ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼, ਜੋ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਹੈ, ਨੂੰ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।