You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/kn/6-consumer/lessons/1-speech-recognition/pi-audio.md

220 lines
17 KiB

# ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ - ರಾಸ್ಪ್ಬೆರ್ರಿ ಪೈ
ಪಾಠದ ಈ ಭಾಗದಲ್ಲಿ, ನೀವು ರಾಸ್ಪ್ಬೆರ್ರಿ ಪೈಯ ಮೇಲೆ ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯಲು ಕೋಡ್ ಬರೆಯುತ್ತೀರಿ. ಧ್ವನಿ ಸೆರೆಹಿಡಿಸುವಿಕೆಯನ್ನು ಒಂದು ಬಟನ್ ನಿಯಂತ್ರಿಸುತ್ತದೆ.
## ಹಾರ್ಡ್ವೇರ್
ರಾಸ್ಪ್ಬೆರ್ರಿ ಪೈಗೆ ಧ್ವನಿ ಸೆರೆಹಿಡಿಸುವಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಒಂದು ಬಟನ್ ಬೇಕು.
ನೀವು ಬಳಸುವ ಬಟನ್ ಒಂದು ಗ್ರೂವ್ ಬಟನ್ ಆಗಿದೆ. ಇದು ಸಿಗ್ನಲ್ ಅನ್ನು ಆನ್ ಅಥವಾ ಆಫ್ ಮಾಡಲು ಪರಿವರ್ತಿಸುವ ಡಿಜಿಟಲ್ ಸೆನ್ಸರ್ ಆಗಿದೆ. ಈ ಬಟನ್‌ಗಳನ್ನು ಪೆÇಸ್ ಮಾಡಿದಾಗ ಹೈ ಸಿಗ್ನಲ್ ಕಳುಹಿಸಲು ಮತ್ತು ಪೆÇಸ್ ಮಾಡದಾಗ ಲೋ ಸಿಗ್ನಲ್ ಕಳುಹಿಸಲು, ಅಥವಾ ಪೆÇಸ್ ಮಾಡಾಗ ಲೋ ಮತ್ತು ಪೆÇಸ್ ಮಾಡದಾಗ ಹೈ ಸಿಗ್ನಲ್ ಕಳುಹಿಸಲು ಸಂರಚಿಸಬಹುದು.
ನೀವು ಮൈಕ್ರೊಫೋನ್ ಆಗಿ ReSpeaker 2-Mics Pi HAT ಬಳಸುತ್ತಿದ್ದರೆ, ಈ ಹ್ಯಾಟ್ ಈಗಾಗಲೇ ಒಂದು ಬಟನ್ ಜೊತೆಗೆ ಇರುತ್ತದೆ, ಆದ್ದರಿಂದ ಬಟನ್ ಸಂಪರ್ಕಿಸುವ ಅವಶ್ಯಕತೆ ಇರುವುದಿಲ್ಲ. ಮುಂದಿನ ಭಾಗಕ್ಕೆ ಜಂಪ್ ಮಾಡಿ.
### ಬಟನ್ ಸಂಪರ್ಕಿಸು
ಬಟನ್ ಅನ್ನು ಗ್ರೂವ್ ಬೇಸ್ ಹ್ಯಾಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಬಹುದು.
#### ಕಾರ್ಯ - ಬಟನ್ ಅನ್ನು ಸಂಪರ್ಕಿಸು
![A grove button](../../../../../translated_images/kn/grove-button.a70cfbb809a85636.webp)
1. ಒಂದು ತುದಿಯನ್ನು ಗ್ರೂವ್ ಕೇಬಲ್‌ನಿಂದ ಬಟನ್ ಮಾಡ್ಯೂಳಿನ ಅವಯವದಲ್ಲಿ ಹಾಕಿ. ಇದು ಒಂದು ದಿಕ್ಕಿನಲ್ಲಿ ಮಾತ್ರ ಹಾಕಬಹುದು.
1. ರಾಸ್ಪ್ಬೆರ್ರಿ ಪೈ ನೆಲಗೂರುವಿಕೆಯ ಸ್ಥಿತಿಯಲ್ಲಿ ಇರುತ್ತಿದ್ದಾಗ, ಗ್ರೂವ್ ಕೇಬಲ್‌ನ ಇನ್ನೊಂದು ತುದಿಯನ್ನು ಪೈಗೆ ಹತ್ತಿಸಿರುವ ಗ್ರೂವ್ ಬೇಸ್ ಹ್ಯಾಟ್‌ನ **D5** ಎಂದು ಗುರುತಿಸಲಾಗಿರುವ ಡಿಜಿಟಲ್ ಅವಯವಕ್ಕೆ ಸಂಪರ್ಕಿಸು. ಈ ಅವಯವವು GPIO ಪಿನ್ಗಳ ಹತ್ತಿರದ ಸಾಲಿನಲ್ಲಿ ಎಡದಿಂದ ಎರಡನೆದು.
![The grove button connected to socket D5](../../../../../translated_images/kn/pi-button.c7a1a4f55943341c.webp)
## ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯೋಣ
ನೀವು ಪೈಠಾನ್ ಕೋಡ್ ಬಳಸಿ ಮೈಕ್ರೊಫೋನಿನಿಂದ ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯಬಹುದು.
### ಕಾರ್ಯ - ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ
1. ಪೈನ POWER ON ಮಾಡಿ ಮತ್ತು ಬೂಟ್ Finish ಆಗಲು ಕಾಯಿರಿ
1. VS Code ಪ್ರಾರಂಭಿಸಿ, ಪೈ ನೇರವಾಗಿ ಅಥವಾ Remote SSH ವಿಸ್ತರಣೆ ಮೂಲಕ ಸಂಪರ್ಕ ಮಾಡಿ.
1. PyAudio ಪಿಪ್ ಪ್ಯಾಕೇಜ್ ಧ್ವನಿಯನ್ನು ದಾಖಲಿಸಲು ಮತ್ತು ಪ್ಲೇ ಮಾಡಲು ಕಾರ್ಯಗಳನ್ನು ಹೊಂದಿದೆ. ಈ ಪ್ಯಾಕೇಜ್ ಕೆಲವು ಧ್ವನಿ ಗ್ರಂಥಾಲಯಗಳ ಮೇಲೆ ಅವಲಂಬಿತವಾಗಿದೆ, ಅವನ್ನು ಮೊದಲಿಗೆ ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ. ಈ ಕೆಳಗಿನ ಆದೇಶಗಳನ್ನು ಟರ್ಮಿನಲ್‌ನಲ್ಲಿ ಓಡಿಸಿ:
```sh
sudo apt update
sudo apt install libportaudio0 libportaudio2 libportaudiocpp0 portaudio19-dev libasound2-plugins --yes
```
1. PyAudio ಪಿಪ್ ಪ್ಯಾಕೇಜ್ ಸ್ಥಾಪಿಸಿ.
```sh
pip3 install pyaudio
```
1. `smart-timer` ಎಂಬ ಹೊಸ ಫೋಲ್ಡರ್ ರಚಿಸಿ ಮತ್ತು ಅದರೊಳಗೆ `app.py` ಎಂಬ ಫೈಲ್ ಸೇರಿಸಿ.
1. ಈ ಫೈಲ್‌ದ ಮೇಲ್ಭಾಗಕ್ಕೆ ಕೆಳಗಿನ ಆಮದುಗಳನ್ನು ಸೇರಿಸಿ:
```python
import io
import pyaudio
import time
import wave
from grove.factory import Factory
```
ಇದು `pyaudio` ಮೋಡ್ಯೂಲ್, ವೇವ್ ಫೈಲ್ಗಳನ್ನು കൈಗಾರಿಕೆಯ ಮಾಡಲು ಕೆಲವು ಸ್ಟ್ಯಾಂಡರ್ಡ್ ಪೈಥನ್ ಮೋಡ್ಯೂಲ್‌ಗಳನ್ನು ಹಾಗೂ ಬಟನ್ ಕ್ಲಾಸ್ ಸೃಷ್ಟಿಸಲು Grove ನ `Factory` ಮೋಡ್ಯೂಲ್ ಅನ್ನು ಆಮದು ಮಾಡುತ್ತದೆ.
1. ಇದೀಗಿಂತ ಕೆಳಗೆ, ಗ್ರೂವ್ ಬಟನ್ ಸೃಷ್ಟಿಸುವ ಕೋಡ್ ಸೇರಿಸಿ.
ನೀವು ReSpeaker 2-Mics Pi HAT ಬಳಸುತ್ತಿದ್ದರೆ, ಈ ಕೆಳಗಿನ ಕೋಡ್ ಬಳಸಿ:
```python
# ReSpeaker 2-Mics Pi HAT上的按钮
button = Factory.getButton("GPIO-LOW", 17)
```
ಇದು ಪೋರ್ಟ್ **D17** ನಲ್ಲಿ ಬಟನ್ ಸೃಷ್ಟಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ReSpeaker 2-Mics Pi HAT ಬಟನ್ ಇದಕ್ಕೆ ಸಂಪರ್ಕಿಸಿದೆ. ಈ ಬಟನ್ ಅನ್ನು ಪೆÇಸ್ ಮಾಡಿದಾಗ ಲೋ ಸಿಗ್ನಲ್ ಕಳುಹಿಸಲು ಸಿದ್ಧಪಡಿಸಲಾಗಿದೆ.
ನೀವು ReSpeaker 2-Mics Pi HAT ಬಳಸುತ್ತಿರುವುದಿಲ್ಲ ಮತ್ತು ಗ್ರೂವ್ ಬಟನ್ ಬೇಸ್ ಹ್ಯಾಟ್‌ಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ ಎಂದು ಇದ್ದರೆ, ಈ ಕೋಡ್ ಬಳಸಿ.
```python
button = Factory.getButton("GPIO-HIGH", 5)
```
ಇದು ಪೋರ್ಟ್ **D5** ನಲ್ಲಿ ಬಟನ್ ಸೃಷ್ಟಿಸುತ್ತದೆ, ಇದು ಪೆÇಸ್ ಮಾಡಿದಾಗ ಹೈ ಸಿಗ್ನಲ್ ಕಳುಹಿಸಲು ನಿಗದಿಪಡಿಸಲಾಗಿದೆ.
1. ಇದರ ಕೆಳಗೆ, PyAudio ಕ್ಲಾಸಿನ ಒಂದು ಉದಾಹರಣೆ ಧ್ವನಿಯನ್ನು ಸಂಭಾಳಿಸಲು ಸೃಷ್ಟಿಸಿ:
```python
audio = pyaudio.PyAudio()
```
1. ಮೈಸರ್ಕೊಫೋನ್ ಮತ್ತು ಸ್ಪೀಕರ್ ಹಾರ್ಡ್ವೇರ್ ಕಾರ್ಡ್ ಸಂಖ್ಯೆ ಘೋಷಿಸಿ. ನೀವು ಈ ಪಾಠದಲ್ಲಿ ಮುಂಚೆ `arecord -l` ಮತ್ತು `aplay -l` ಆಜ್ಞೆಗಳನ್ನು ಓಡಿಸಿ ಕಂಡುಹಿಡಿದ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಯೇ ಇದು ಆಗಿರುತ್ತದೆ.
```python
microphone_card_number = <microphone card number>
speaker_card_number = <speaker card number>
```
`<microphone card number>` ಅನ್ನು ನಿಮ್ಮ ಮೈಸರ್ಕೊಫೋನ್ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಯಿಂದ ಬದಲಾಯಿಸಿ.
`<speaker card number>` ಅನ್ನು ನಿಮ್ಮ ಸ್ಪೀಕರ್ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಯಿಂದ ಬದಲಾಯಿಸಿ, ಅದೇ ಸಂಖ್ಯೆಯನ್ನು ನೀವು `alsa.conf` ಫೈಲ್‌ಗಳಲ್ಲಿ ಸೆಟ್ ಮಾಡಿದ್ದೀರಿ.
1. ಇದರ ಕೆಳಗೆ, ಧ್ವನಿಯ ಸೆರೆಹಿಡಿಕೆ ಮತ್ತು ಪ್ಲೇಬ್ಯಾಕ್‌ಗೆ ಬಳಸಲಾದ ಸಂದರ್ಶನ ದರವನ್ನು ಘೋಷಿಸಿ. ನಿಮ್ಮ ಹಾರ್ಡ್ವೇರ್ ಅವಲಂಬಿಸಿ ಇದನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗಬಹುದು.
```python
rate = 48000 #48ಕೆಹರ್ಝ್
```
ಈ ಕೋಡ್ ಮರುನಡೆಸುವಾಗ ಸಂದರ್ಶನ ದರ ದೋಷಗಳು ಬಂದರೆ, ಈ ಮೌಲ್ಯವನ್ನು `44100` ಅಥವಾ `16000` ಗೆ ಬದಲಾಯಿಸಿ. ಮೌಲ್ಯ ಹೆಚ್ಚು ಇದ್ದರೆ ಧ್ವನಿಯ ಗುಣಮಟ್ಟ ಉತ್ತಮವಾಗಿರುತ್ತದೆ.
1. ಇದರ ಕೆಳಗೆ, `capture_audio` ಎಂಬ ಹೊಸ ಫಂಕ್ಷನ್ ರಚಿಸಿ. ಇದು ಮೈಸರ್ಕೊಫೋನಿನಿಂದ ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯಲು ಕರೆಮಾಡಲಾಗುತ್ತದೆ:
```python
def capture_audio():
```
1. ಈ ಫಂಕ್ಷಣನೊಳಗೆ ಕೆಳಗಿನ ವ್ಯವಹಾರಗಳನ್ನು ಸೇರಿಸಿ:
```python
stream = audio.open(format = pyaudio.paInt16,
rate = rate,
channels = 1,
input_device_index = microphone_card_number,
input = True,
frames_per_buffer = 4096)
frames = []
while button.is_pressed():
frames.append(stream.read(4096))
stream.stop_stream()
stream.close()
```
ಈ ಕೋಡ್ PyAudio ವಸ್ತುವನ್ನು ಉಪಯೋಗಿಸಿ ಧ್ವನಿ ಇನ್‌ಪುಟ್ ಸ್ಟ್ರೀಂ ತೆರೆಯುತ್ತದೆ. ಈ ಸ್ಟ್ರೀಮ್ ಮೈಸರ್ಕೊಫೋನಿನಿಂದ 16KHz ನಲ್ಲಿ ಧ್ವನಿಯನ್ನು ಸೆರೆಹಿಡಿಯುತ್ತದೆ, ಮತ್ತು ಪ್ರತಿಯೊಂದು ಬಾರಿ 4096 ಬೈಟ್ ಗಾತ್ರದ ಬಫರ್ಸ್‌ಗಳಲ್ಲಿ ಸೆರೆಹಿಡಿಯುತ್ತದೆ.
ಕೋಡ್ ನಂತರ Grove ಬಟನ್ ಪೆÇಸ್ ಆಗಿರುವಾಗ ಲೂಪ್ ಮಾಡುತ್ತದೆ, ಪ್ರತಿಯೊಂದು ಬಾರಿ ಈ 4096 ಬೈಟ್ ಬಫರ್ಸ್‌ನ್ನು ಒಂದು ಅರೇಗೆ ಓದುತ್ತದೆ.
> 💁 ನೀವು `open` ವಿಧಾನಕ್ಕೆ ನೀಡಲಾದ ಆಯ್ಕೆಗಳ ಬಗ್ಗೆ ಇನ್ನಷ್ಟು ಓದಿಕೊಳ್ಳಲು [PyAudio ಡಾಕ್ಯುമെಂಟೇಶನ್](https://people.csail.mit.edu/hubert/pyaudio/docs/) ನೋಡಬಹುದು.
ಬಟನ್ ಬಿಡುಗಡೆ ಆದಾಗ, ಸ್ಟ್ರೀಂ ನಿಲ್ಲಿಸಿ ಮುಚ್ಚಲಾಗುತ್ತದೆ.
1. ಈ ಫಂಕ್ಷನ್ ಕೊನೆಯಲ್ಲಿ ಕೆಳಗಿನ ವ್ಯವಹಾರ ಸೇರಿಸಿ:
```python
wav_buffer = io.BytesIO()
with wave.open(wav_buffer, 'wb') as wavefile:
wavefile.setnchannels(1)
wavefile.setsampwidth(audio.get_sample_size(pyaudio.paInt16))
wavefile.setframerate(rate)
wavefile.writeframes(b''.join(frames))
wav_buffer.seek(0)
return wav_buffer
```
ಈ ಕೋಡ್ ಒಂದು ದ್ವಮೀಯ ಬಫರ್ ಸೃಷ್ಟಿಸುತ್ತದೆ ಮತ್ತು ಸೆರೆಹಿಡಿದ ಧ್ವನಿಯನ್ನು [WAV ಫೈಲ್](https://wikipedia.org/wiki/WAV) ಆಗಿ ಬರೆದು ಅದನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ. ಇದು ಒತ್ತಡವಿಲ್ಲದ ಧ್ವನಿಯನ್ನು ಫೈಲ್‌ಗೆ ಬರೆಯುವ ಸಾಮಾನ್ಯ ವಿಧಾನ.
1. ಆಡಿಯೋ ಬಫರ್ ಅನ್ನು ಪ್ಲೇ ಮಾಡಲು ಕೆಳಗಿನ `play_audio` ಫಂಕ್ಷನ್ ಸೇರಿಸಿ:
```python
def play_audio(buffer):
stream = audio.open(format = pyaudio.paInt16,
rate = rate,
channels = 1,
output_device_index = speaker_card_number,
output = True)
with wave.open(buffer, 'rb') as wf:
data = wf.readframes(4096)
while len(data) > 0:
stream.write(data)
data = wf.readframes(4096)
stream.close()
```
ಈ ಫಂಕ್ಷನ್ ಇನ್ನೊಂದು ಆಡಿಯೋ ಸ್ಟ್ರೀಂ ತೆರೆಯುತ್ತದೆ, ಇದೀಗ ಔಟ್‌풋್ ಗಾಗಿ - ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡಲು. ಇದು ಇನ್‌ಪುಟ್ ಸ್ಟ್ರೀಮ್‌ನಂತೆಯೇ ನಿಭಂಧನೆಗಳನ್ನು ಬಳಸುತ್ತದೆ. ಬಫರ್ ಅನ್ನು ವೇವ್ ಫೈಲ್ ಆಗಿ ತೆರೆಯುವ ಮೂಲಕ 4096 ಬೈಟ್ ತುಂಡುಗಳಲ್ಲಿ ಔಟ್‌ಪುಟ್ ಸ್ಟ್ರೀಂಗೆ ಬರೆಯುತ್ತಾ ಧ್ವನಿಯನ್ನು ಪ್ಲೇ ಮಾಡುತ್ತದೆ. ನಂತರ ಸ್ಟ್ರೀಂ ಮುಚ್ಚಲ್ಪಡುತ್ತದೆ.
1. `capture_audio` ಫಂಕ್ಷನ್ ಕೆಳಗೆ ಈ ಕೆಳಗಿನ ಕೋಡ್ ಸೇರಿಸಿ, ಬಟನ್ ಪೆÇಸ್ ಆಗುವವರೆಗೂ ಲೂಪ್ ಮಾಡುತ್ತದೆ. ಬಟನ್ ಪೆÇಸ್ ಆದಾಗ, ಧ್ವನಿ ಸೆರೆಹಿಡಿಯಲ್ಪಟ್ಟ, ನಂತರ ಪ್ಲೇ ಮಾಡಲ್ಪಟ್ಟಿರುತ್ತದೆ.
```python
while True:
while not button.is_pressed():
time.sleep(.1)
buffer = capture_audio()
play_audio(buffer)
```
1. ಕೋಡ್ ಅನ್ನು ಓಡಿಸಿ. ಬಟನ್ ಅನ್ನು ಒತ್ತಿ ಮತ್ತು ಮೈಕ್ರೊಫೋನಿಗೆ ಮಾತನಾಡಿ. ಪೂರ್ಣಗೊಂಡಾಗ ಬಟನ್ ಬಿಡುಗಡೆ ಮಾಡಿ, நீங்கள் ನೋಡುವಿರಿ ರೆಕಾರ್ಡಿಂಗ್ ಕೇಳಿಸುತ್ತಿದೆ.
PyAudio ಉದಾಹರಣೆ ಸೃಷ್ಟಿಸುವಾಗ ನೀವು ಕೆಲವು ALSA ದೋಷಗಳನ್ನು ಕಾಣಬಹುದು. ಈ ದೋಷಗಳು ನಿಮ್ಮ ಪೈ ಇತರೆ ಆಡಿಯೋ ಸಾಧನಗಳಿಗೆ ಸಂರಚನೆಯ ಕುರಿತು ಆಗಿರಬಹುದು. ನೀವು ಅವುಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಬಹುದು.
```output
pi@raspberrypi:~/smart-timer $ python3 app.py
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2565:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
```
ನೀವು ಕೆಳಗಿನ ದೋಷವನ್ನು ಕಾಣುವುದಾದರೆ:
```output
OSError: [Errno -9997] Invalid sample rate
```
`rate` ಅನ್ನು 44100 ಅಥವಾ 16000 ಗೆ ಬದಲಾಯಿಸಿ.
> 💁 ನೀವು ಈ ಕೋಡ್ ಅನ್ನು [code-record/pi](../../../../../6-consumer/lessons/1-speech-recognition/code-record/pi) ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಕಾಣಬಹುದು.
😀 ನಿಮ್ಮ ಧ್ವನಿ ದಾಖಲು ಕಾರ್ಯಕ್ರಮ ಯಶಸ್ವಿಯಾಯಿತು!
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ತಪ್ಪು ಹೇಳಿಕೆ**:
ಈ ದಾಖಲೆಯನ್ನು AI ಅನುವಾದ ಸೇವೆ [Co-op Translator](https://github.com/Azure/co-op-translator) ಬಳಸಿ ಅನುವದಿಸಲಾಗಿದೆ. ನಿಖರತೆಯತ್ತ ನಾವು ಪ್ರಯತ್ನಿಸುವುದಾದರೂ, ಸ್ವಯಂಚಾಲಿತ ಅನುವಾದಗಳಲ್ಲಿ ದೋಷಗಳು ಅಥವಾ ತಪ್ಪುಗಳಿರುವ ಸಾಧ್ಯತೆ ಇದ್ದು ತನ್ನದಾಗಿದೆ. ಮೂಲ ಭಾಷೆಯ ಮೂಲ ದಾಖಲೆ ಅಧಿಕೃತ ಮೂಲ ಎಂದು ಪರಿಗಣಿಸಬೇಕು. ಪ್ರಮುಖ ಮಾಹಿತಿಗಾಗಿ, ವೃತ್ತಿಪರ ಮಾನವ ಅನುವಾದವನ್ನು ಶಿಫಾರಸು ಮಾಡಲಾಗುತ್ತದೆ. ಈ ಅನುವಾದ ಬಳಕೆಯಿಂದ ಉಂಟಾಗುವ ಯಾವದಾದರೂ ತಪ್ಪುಧಾರಣೆಗಳು ಅಥವಾ ತಪ್ಪು ಅರ್ಥಗರ್ಭಿತತೆಗಳಿಗೆ ನಾವು ಜವಾಬ್ದಾರರಾಗುವುದಿಲ್ಲ.
<!-- CO-OP TRANSLATOR DISCLAIMER END -->