Регистрация  |  Вход

Raspberry PI против храпа

Привет.

Хочу поделиться одним техническим экспериментов, который меня заставила провести жизнь.

Страдаю такой проблемой как ХРАП и если неудачно ночью перевернусь, то буду храпеть сильно, очень сильно. Поэтому уже давно по ночам (большей ее части) сплю один в отдельной комнате. У жены нервы сдают, дети просыпаются, потом фиг уложишь. После "неудачные" ночи, когда много храплю, целый день мучаюсь с головной болью и полной апатией к работе. Поэтому долго думал как с этой напастью бороться. Заметил, что если меня ночью будят, и заставляют перевернуться, то это очень помогает и ночь превращается в "удачную".

Долго думал кто-же будет моей механической сиделкой, которая будет бдить за моим спокойным сном. Долго пытался воспользоваться детскими игрушками-повторяшками которые реагирут на голос. НО как-то не срасталось, то порог срабатывания не тот, то звуки и их громкость не соответствует ночному режиму в квартире.

И тут меня осенило - попробовать мой Raspberry Pi (блин, чет я раньше не додумался). Короче собрал и закодировал за полдня отличный боевой прототип:
- Raspberry Pi
- c270 Logitech webcam (в роли микрофона)
- колонки.
Программная начинка:
- Python + PyAudio
Кода на один экран (как же все просто!)

В общем запускается скрипт - он считывает выходные данные с микрофона в буфер (порциями) и анализирует (пока анализ примитивный - получение пикового значения). Если превышен порог срабатывания - запускается проигрывание wav файла. Нагрузка в режиме "слежения за сном" на малинку минимальная (в районе 1-2%) так что можно не беспокоиться за экологичность данного способа.

Теперь буду испытывать на практике.

В перспективе улучшить метод анализа звука с микрофона и запись в базу. Потом можно будет писать в базу и слать на внешний сервер для последующего анализа.

Кстати пока писал нашел похожее решение, но там чувак пошел дальше. Он еще прикрутил motion detection (один хрен web камера то есть в распоряжении) и датчик положения тела (но тут я конечно сомневаюсь в целесообразности - опутывать себя проводами ночью сомнительное удовольствие). В итоге он писал в базу и звуки и положение тела и еще фоткал это дело. Ну полный набор.

Привет. 

Хочу поделиться одним техническим экспериментов, который меня заставила провести жизнь.

Страдаю такой проблемой как ХРАП и если неудачно ночью перевернусь, то буду храпеть сильно, очень сильно. Поэтому уже давно по ночам (большей ее части) сплю один в отдельной комнате. У жены нервы сдают, дети просыпаются, потом фиг уложишь. После "неудачные" ночи, когда много храплю, целый день мучаюсь с головной болью и полной апатией к работе. Поэтому долго думал как с этой напастью бороться. Заметил, что если меня ночью будят, и заставляют перевернуться, то это очень помогает и ночь превращается в "удачную".

Долго думал кто-же будет моей механической сиделкой, которая будет бдить за моим спокойным сном. Долго пытался воспользоваться детскими игрушками-повторяшками которые реагирут на голос. НО как-то не срасталось, то порог срабатывания не тот, то звуки и их громкость не соответствует ночному режиму в квартире.

И тут меня осенило - попробовать мой Raspberry Pi (блин, чет я раньше не додумался). Короче собрал и закодировал за полдня отличный боевой прототип:
- Raspberry Pi
- c270 Logitech webcam (в роли микрофона)
- колонки.
Программная начинка:
- Python + PyAudio
Кода на один экран (как же все просто!)

В общем запускается скрипт - он считывает выходные данные с микрофона в буфер (порциями) и анализирует (пока анализ примитивный - получение пикового значения). Если превышен порог срабатывания - запускается проигрывание wav файла. Нагрузка в режиме "слежения за сном" на малинку минимальная (в районе 1-2%) так что можно не беспокоиться за экологичность данного способа.

Теперь буду испытывать :D на практике. 

В перспективе улучшить метод анализа звука с микрофона и запись в базу. Потом можно будет писать в базу и слать на внешний сервер для последующего анализа.

Кстати пока писал нашел похожее решение, но там чувак пошел дальше. Он еще прикрутил motion detection (один хрен web камера то есть в распоряжении) и датчик положения тела (но тут я конечно сомневаюсь в целесообразности - опутывать себя проводами ночью сомнительное удовольствие). В итоге он писал в базу и звуки и положение тела и еще фоткал это дело. Ну полный набор.



А ты не пробовал нос проаперировать? У моей жены есть такая же проблема, будем резать. Конечно, Raspberry Pi дешевле даже плюс твоя работа. Но это не только на сон влияет.
Нам в частной клинике в Минске выставили пока счет в $1000.

А ты не пробовал нос проаперировать? У моей жены есть такая же проблема, будем резать. Конечно, Raspberry Pi дешевле даже плюс твоя работа. Но это не только на сон влияет.
Нам в частной клинике в Минске выставили пока счет в $1000.

Andrew Muzychuk
А ты не пробовал нос проаперировать?

Да мне пока никто и не предлагал, по крайней мере из бесплатных врачей.
Надо будет сходить в платную с этим вопросом.

[quote="Andrew Muzychuk"]А ты не пробовал нос проаперировать?[/quote]
Да мне пока никто и не предлагал, по крайней мере из бесплатных врачей.
Надо будет сходить в платную с этим вопросом.

Моей жене в детстве ломали нос. Она в баскет играла и вообще она у меня боевая дама. С храпом у нее не таки проблемы ка ку тебя, но есть со здоровьем. И одна из причин - недостаточное количество кислорода.

Моей жене в детстве ломали нос. Она в баскет играла и вообще она у меня боевая дама. С храпом у нее не таки проблемы ка ку тебя, но есть со здоровьем. И одна из причин - недостаточное количество кислорода.

Andrew Muzychuk
Моей жене в детстве ломали нос. Она в баскет играла и вообще она у меня боевая дама. С храпом у нее не таки проблемы ка ку тебя, но есть со здоровьем. И одна из причин - недостаточное количество кислорода.

Вот реально не уверен что причина храпа именно в этом))

[quote="Andrew Muzychuk"]Моей жене в детстве ломали нос. Она в баскет играла и вообще она у меня боевая дама. С храпом у нее не таки проблемы ка ку тебя, но есть со здоровьем. И одна из причин - недостаточное количество кислорода.[/quote]
Вот реально не уверен что причина храпа именно в этом))

У меня с перегородкой все норм, мне в детстве ничего не ломали, да и комисси всякие в военные академии проходил на ура. В общем хз что за хрень. Типа стандартная причина - расслабляются какая-то мембрана и язык и закрываю доступ кислорода. Будем думать.

Пока устройство прошло боевое крещение - будило меня сегодня ночью ну ОЧЕНЬ часто - я даже со счета сбился. На удивление чувствую себя бодричком . Но то что так часто "сработка" шла это не радует. По ходу я храплю все время пока сплю. Надо еще прикрутить запись в базу, чтобы потом проанализировать и точно сказать что ночью происходит.

У меня с перегородкой все норм, мне в детстве ничего не ломали, да и комисси всякие в военные академии проходил на ура. В общем хз что за хрень. Типа стандартная причина - расслабляются какая-то мембрана и язык и закрываю доступ кислорода. Будем думать.

Пока устройство прошло боевое крещение - будило меня сегодня ночью ну ОЧЕНЬ часто - я даже со счета сбился. На удивление чувствую себя бодричком :D . Но то что так часто "сработка" шла это не радует. По ходу я храплю все время пока сплю. Надо еще прикрутить запись в базу, чтобы потом проанализировать и точно сказать что ночью происходит.

Sergey Prishchepa
Вот реально не уверен что причина храпа именно в этом))
Может потому, что ты не хирург с 10-летним стажем? ;-) Нам два врача в разных клиниках сказали одно и тоже. Я надеюсь, что они оба правы :-)

[quote="Sergey Prishchepa"]Вот реально не уверен что причина храпа именно в этом))[/quote]Может потому, что ты не хирург с 10-летним стажем? ;-) Нам два врача в разных клиниках сказали одно и тоже. Я надеюсь, что они оба правы :-)

Dmitry Shnyrev
У меня с перегородкой все норм, мне в детстве ничего не ломали, да и комисси всякие в военные академии проходил на ура. В общем хз что за хрень. Типа стандартная причина - расслабляются какая-то мембрана и язык и закрываю доступ кислорода. Будем думать.

Да, мы тоже были уверенны, что нос в этом случае ну очень малую роль играет. Но мы пошли с носом к этим врачам и оба спрашивали, а не беспокоит ли нас храп. В твоем случае, Дима, может только Raspberry Pi поможет :-)

Но то что так часто "сработка" шла это не радует.
Попробуй уменьшить чувствительность или увеличить количество Децибел, при которых срабатывает "будильник".
Есть программы для web/ip камер, так вот там такие шумы можно фильтровать. Там, правда, помимо звука можно настраивать и картинку. Но про звук я знаю из этих программ. Как только звук с микрофона переваливает за выставленной количество дБ она начинает записывать. Тебе надо найти эту цифру. Я думаю тебя "будильник" должен будить только при очень громком храпе.

[quote="Dmitry Shnyrev"]У меня с перегородкой все норм, мне в детстве ничего не ломали, да и комисси всякие в военные академии проходил на ура. В общем хз что за хрень. Типа стандартная причина - расслабляются какая-то мембрана и язык и закрываю доступ кислорода. Будем думать.[/quote]
Да, мы тоже были уверенны, что нос в этом случае ну очень малую роль играет. Но мы пошли с носом к этим врачам и оба спрашивали, а не беспокоит ли нас храп. В твоем случае, Дима, может только Raspberry Pi поможет :-)

[quote]Но то что так часто "сработка" шла это не радует.[/quote]Попробуй уменьшить чувствительность или увеличить количество Децибел, при которых срабатывает "будильник".
Есть программы для web/ip камер, так вот там такие шумы можно фильтровать. Там, правда, помимо звука можно настраивать и картинку. Но про звук я знаю из этих программ. Как только звук с микрофона переваливает за выставленной количество дБ она начинает записывать. Тебе надо найти эту цифру. Я думаю тебя "будильник" должен будить только при очень громком храпе.

Да, есть эта цифра в скрипте. Опытным путем найду оптимальный вариант.
На счет существующих программ - это не наш метод
Мы ж программисты - все самописное и самопальное - зато максимально гибкое.
Кстати и работать с изображением с камеры на Python еще проще чем со звуком. Это была моя давняя задумка - замутить на базе RPi домашнюю сигнализацию и с видеонаблюдением и с оповещением и по максимуму автономную. Уже были попытки собрать на базе RPi + web камера + 3G модем + датчики (проводные пока). Не зватило свободного времени.

Насколько же эта маленькая коробочка классная!!! Я просто боготворю тех кто ее придумал.

Кстати небольшой опыт в офисе показал - что распберри вполне хватит для организации рабочего места для какой-нибудь девочки HR или офис менеджера. Полноценная система, работает даже быстрее чем у многих засранные домашние компы. Все приложения (офисные + браузер) есть. И все это за 50$ + HDMI моник. А сколько еще преимуществ - просто огонь!!!

Да, есть эта цифра в скрипте. Опытным путем найду оптимальный вариант.
На счет существующих программ - это не наш метод :D
Мы ж программисты - все самописное и самопальное - зато максимально гибкое.
Кстати и работать с изображением с камеры на Python еще проще чем со звуком. Это была моя давняя задумка - замутить на базе RPi домашнюю сигнализацию и с видеонаблюдением и с оповещением и по максимуму автономную. Уже были попытки собрать на базе RPi + web камера + 3G модем + датчики (проводные пока). Не зватило свободного времени. 

Насколько же эта маленькая коробочка классная!!! Я просто боготворю тех кто ее придумал. 

Кстати небольшой опыт в офисе показал - что распберри вполне хватит для организации рабочего места для какой-нибудь девочки HR или офис менеджера. Полноценная система, работает даже быстрее чем у многих засранные домашние компы. Все приложения (офисные + браузер) есть. И все это за 50$ + HDMI моник. А сколько еще преимуществ - просто огонь!!!

Кстати еще заметил одну штуку.

Пока пилил месяц на nodejs, да и вообще javascript - настолько привык к его асинхронности (что раньше сильно ругал) что вчера на питоне тупо застрял на простейших вещах - основной цикл скрипта + асинхронные анализаторы. Пришлось выдумывать синхронно все на счетчикам - жесть. Все-таки NodeJS если его понять и "простить" офигенская штука. Пилить асинхронные штуки так просто это мега круто. Не спорю что в python это тоже реализовано на потоках, но почему-то у меня быстро не завелось - все-таки надо изучать эту тему а не просто брать и использовать. Так что хочу признать что NodeJS рулит!
Попробую запустить что-то на NodeJS на малинке. Только боюсь что резурсов будет жрать значительно больше чем python.

Кстати еще заметил одну штуку.

[img]https://i.imgur.com/p3HdC8r.png[/img]

Пока пилил месяц на nodejs, да и вообще javascript - настолько привык к его асинхронности (что раньше сильно ругал) что вчера на питоне тупо застрял на простейших вещах - основной цикл скрипта + асинхронные анализаторы. Пришлось выдумывать синхронно все на счетчикам - жесть. Все-таки NodeJS если его понять и "простить" :D офигенская штука. Пилить асинхронные штуки так просто это мега круто. Не спорю что в python это тоже реализовано на потоках, но почему-то у меня быстро не завелось - все-таки надо изучать эту тему а не просто брать и использовать. Так что хочу признать что NodeJS рулит! 
Попробую запустить что-то на NodeJS на малинке. Только боюсь что резурсов будет жрать значительно больше чем python.

Andrew Muzychuk
Sergey Prishchepa
Вот реально не уверен что причина храпа именно в этом))
Может потому, что ты не хирург с 10-летним стажем? ;-) Нам два врача в разных клиниках сказали одно и тоже. Я надеюсь, что они оба правы :-)

Отрезать лишние всегда можно)) а мой доктор более гуманный таблетачку даст само всё отвалится ))

[quote="Andrew Muzychuk"][quote="Sergey Prishchepa"]Вот реально не уверен что причина храпа именно в этом))[/quote]Может потому, что ты не хирург с 10-летним стажем? ;-) Нам два врача в разных клиниках сказали одно и тоже. Я надеюсь, что они оба правы :-)[/quote]
Отрезать лишние всегда можно)) а мой доктор более гуманный таблетачку даст само всё отвалится ))

Там не отрезать, а разломать, выпрямить и зашить.
Один из докторов не делает операции, а только консультации. Так что одному точно никакой выходы от операции нет.

Там не отрезать, а разломать, выпрямить и зашить.
Один из докторов не делает операции, а только консультации. Так что одному точно никакой выходы от операции нет.

Andrew Muzychuk
Там не отрезать, а разломать, выпрямить и зашить.
Один из докторов не делает операции, а только консультации. Так что одному точно никакой выходы от операции нет.

Ок ладно согласен, прямой нос никому не мешал.Димы случай на мой взгляд это операция через одно место.

[quote="Andrew Muzychuk"]Там не отрезать, а разломать, выпрямить и зашить.
Один из докторов не делает операции, а только консультации. Так что одному точно никакой выходы от операции нет.[/quote]
Ок ладно согласен, прямой нос никому не мешал.Димы случай на [b]мой взгляд[/b] это операция через одно место. 

Я тоже думаю, что Диме только Raspberry Pi поможет :-)

Я тоже думаю, что Диме только Raspberry Pi поможет :-)

:D 

По просьбам трудящихся программистов и волей судьбы страдающих тем же недугом выкладываю сюда информацию по моей наработке.

Вот сам код скрипта на python:

import pyaudio
import audioop
import struct
import math
import time
import wave
import os
import sys

THRESHOLD = 1500
FORMAT = pyaudio.paInt16
RATE = 48000
INPUT_FRAMES_PER_BLOCK = 8192 #int(RATE*INPUT_BLOCK_TIME)

f = wave.open(os.path.dirname(os.path.realpath(__file__))+"/Clinking_Teaspoon-Simon_Craggs-59102891.wav", "rb")

class TapTester(object):

def __init__(self):
self.pa = pyaudio.PyAudio()
#self.stream = self.open_mic_stream()

self.show_devices()

print "INPUT_DEVICE_INDEX:", self.INPUT_DEVICE_INDEX
print "OUTPUT_DEVICE_INDEX:", self.OUTPUT_DEVICE_INDEX

self.stream = self.pa.open(format = FORMAT,
channels = 1,
rate = RATE,
input = True,
input_device_index = self.INPUT_DEVICE_INDEX,
frames_per_buffer = INPUT_FRAMES_PER_BLOCK)


self.stream2 = self.pa.open(format = self.pa.get_format_from_width(f.getsampwidth()),
channels = f.getnchannels(),
rate = f.getframerate(),
output = True,
output_device_index = self.OUTPUT_DEVICE_INDEX)

def show_devices(self):
for i in range( self.pa.get_device_count() ):
devinfo = self.pa.get_device_info_by_index(i)
print( "Device %d: %s"%(i, devinfo["name"]) )
if "USB Sound Device" in devinfo["name"]:
self.OUTPUT_DEVICE_INDEX = i;
if "USB Device" in devinfo["name"]:
self.INPUT_DEVICE_INDEX = i;

def stop(self):
self.stream.close()
self.stream2.close()

def listen(self):
try:
block = self.stream.read(INPUT_FRAMES_PER_BLOCK, exception_on_overflow = False)
except IOError, e:
print( "Error recording: %s"%(e) )
return

amplitude = audioop.rms(block, 2)

if amplitude > THRESHOLD:
print 'A: ', amplitude
print 'Play!'

f.setpos(0)
data = f.readframes(1024)
while data:
self.stream2.write(data)
data = f.readframes(1024)

sys.stdout.flush()

if __name__ == "__main__":
tt = TapTester()

timer = 0
while True:
tt.listen()
if timer < time.time():
timer = time.time() + 10
print '.'
sys.stdout.flush()

!!! Просьба не кидать тапками по поводу качества кода - делал тупо из копипастов чтобы хоть как-то работало. Оптимизировать желания пока не появлялось.

Из нюансов:
метод show_devices при запуске выведет в консоль список доступных звуковых устройств подключенных к распбери. У меня это были камера Logitech с270 (определялась как "USB Device ...") и USB Sound Card производства какого-то подвального супермегагиганта звуковой индустрии из китая (за 10$) (определялась как "USB Sound Device ..."). Номера этих устройств надо передать в output_device_index и input_device_index при инициализации. Собственно вся магия. В цикле читается stream, определяется превышение порога и в stream2 происходит проигрываение wav файла.

Этого достаточно чтобы заставить работать скрип в ручном режиме.

Для автоматизации автозапуска (чтобы после включения распбери не лазить по ssh и не запускать скрипт) я использую supervisord - там никакой сложности - самые примитивные настройки по любому hello world.

По просьбам трудящихся программистов и волей судьбы страдающих тем же недугом выкладываю сюда информацию по моей наработке.

Вот сам код скрипта на python:
[code]
import pyaudio
import audioop
import struct
import math
import time
import wave
import os
import sys

THRESHOLD = 1500
FORMAT = pyaudio.paInt16
RATE = 48000
INPUT_FRAMES_PER_BLOCK = 8192 #int(RATE*INPUT_BLOCK_TIME)

f = wave.open(os.path.dirname(os.path.realpath(__file__))+"/Clinking_Teaspoon-Simon_Craggs-59102891.wav", "rb")

class TapTester(object):

	def __init__(self):
		self.pa = pyaudio.PyAudio()
		#self.stream = self.open_mic_stream()

		self.show_devices()

		print "INPUT_DEVICE_INDEX:", self.INPUT_DEVICE_INDEX
		print "OUTPUT_DEVICE_INDEX:", self.OUTPUT_DEVICE_INDEX

		self.stream = self.pa.open(format = FORMAT,
					channels = 1,
					rate = RATE,
					input = True,
					input_device_index = self.INPUT_DEVICE_INDEX,
					frames_per_buffer = INPUT_FRAMES_PER_BLOCK)


		self.stream2 = self.pa.open(format = self.pa.get_format_from_width(f.getsampwidth()),
					channels = f.getnchannels(),
					rate = f.getframerate(),
					output = True,
					output_device_index = self.OUTPUT_DEVICE_INDEX)

	def show_devices(self):
		for i in range( self.pa.get_device_count() ):
			devinfo = self.pa.get_device_info_by_index(i)
			print( "Device %d: %s"%(i, devinfo["name"]) )
			if "USB Sound Device" in devinfo["name"]:
				self.OUTPUT_DEVICE_INDEX = i;
			if "USB Device" in devinfo["name"]:
				self.INPUT_DEVICE_INDEX = i;

	def stop(self):
		self.stream.close()
		self.stream2.close()

	def listen(self):
		try:
			block = self.stream.read(INPUT_FRAMES_PER_BLOCK, exception_on_overflow = False)
		except IOError, e:
			print( "Error recording: %s"%(e) )
			return

		amplitude = audioop.rms(block, 2)

		if amplitude > THRESHOLD:
			print 'A: ', amplitude
			print 'Play!'

			f.setpos(0)
			data = f.readframes(1024)
			while data:
				self.stream2.write(data)
				data = f.readframes(1024)

			sys.stdout.flush()

if __name__ == "__main__":
	tt = TapTester()

	timer = 0
	while True:
		tt.listen()
		if timer < time.time():
			timer = time.time() + 10
			print '.'
			sys.stdout.flush()
[/code]

!!! Просьба не кидать тапками по поводу качества кода - делал тупо из копипастов чтобы хоть как-то работало. Оптимизировать желания пока не появлялось.

Из нюансов:
метод show_devices при запуске выведет в консоль список доступных звуковых устройств подключенных к распбери. У меня это были камера Logitech с270 (определялась как "USB Device ...") и USB Sound Card производства какого-то подвального супермегагиганта звуковой индустрии из китая (за 10$) (определялась как "USB Sound Device ..."). Номера этих устройств надо передать в output_device_index и input_device_index при инициализации. Собственно вся магия. В цикле читается stream, определяется превышение порога и в stream2 происходит проигрываение wav файла.

Этого достаточно чтобы заставить работать скрип в ручном режиме.

Для автоматизации автозапуска (чтобы после включения распбери не лазить по ssh и не запускать скрипт) я использую supervisord - там никакой сложности - самые примитивные настройки по любому hello world.


Дима, спасибо большое. Ты себя доктором не ощущаешь? Можно еще электрошокер подрубить

Дима, спасибо большое. Ты себя доктором не ощущаешь? Можно еще электрошокер подрубить

Это вариант!!! Главное было бы что-то похожее, чем можно управлять программно.

Это вариант!!! Главное было бы что-то похожее, чем можно управлять программно. :) 

а ты не искал готовые решения для смартфона? может есть проги, которые в заданное время включают микрофон смартфона и слушают определенные звуки? конечно такой режим жрет батарею, но все равно ночью тел на зарядке

а ты не искал готовые решения для смартфона? может есть проги, которые в заданное время включают микрофон смартфона и слушают определенные звуки? конечно такой режим жрет батарею, но все равно ночью тел  на зарядке

Кстати вполне возможно!
Я просто пока так и не перешел на смартфоны и для меня эти устройства далеки.
НО в принципе любой смартфон это отличная альтернатива распбери (не по цене конечно )
В них и камера и динамики и датчики и связь с интернет есть и работать могут автономно. Надо просто научиться под них кодировать

Кстати вполне возможно!
Я просто пока так и не перешел на смартфоны и для меня эти устройства далеки.
НО в принципе любой смартфон это отличная альтернатива распбери (не по цене конечно :D )
В них и камера и динамики и датчики и связь с интернет есть и работать могут автономно. Надо просто научиться под них кодировать :D 

Продолжая тему. Так как наконец-то стал обладаталем Андроид, то решил пробить и тему храпа на данной платформе.
Оказывается все уже давно придумано до нас
вот такое приложение Sleep As Android (походу топовое, топовее не нашел )

позволяет превратить телефон в целый комбайн по управлению и контролю за сном.
И одни их фич - определение храпа, запись в звуковой файл. И даже есть функция "разбудить" при определении храпа.
Испытывал прошлой ночью на себе. Итог не утишительный За всю ночь я спал без храпа наверное только 20% времени. Все остальное время храплю. Хорошо так, забористо, голосисто! При всем желании телефона меня разбудить (это отражено на графике) у него ничего не вышло. Сам я лично помню только пару раз просыпался, хотя по графику отметки идут через каждый 3 минуты. А итог на утро - как будто и не спал

Но само приложение классное. Там есть много фич. Не знаю насколько они все полезные, но поиграться можно. Есть фича как определение фаз сна и подстройка будильника. Но я толком и не понял как это работает.

Продолжая тему. Так как наконец-то стал обладаталем Андроид, то решил пробить и тему храпа на данной платформе.
Оказывается все уже давно придумано до нас :D
вот такое приложение [url=https://play.google.com/store/apps/details?id=com.urbandroid.sleep]Sleep As Android[/url] (походу топовое, топовее не нашел :D )

[img]http://sleep.urbandroid.org/wp-content/uploads/screen11-36-44_framed_small.png[/img]

позволяет превратить телефон в целый комбайн по управлению и контролю за сном.
И одни их фич - определение храпа, запись в звуковой файл. И даже есть функция "разбудить" при определении храпа.
Испытывал прошлой ночью на себе. Итог не утишительный :( За всю ночь я спал без храпа наверное только 20% времени. Все остальное время храплю. Хорошо так, забористо, голосисто! При всем желании телефона меня разбудить (это отражено на графике) у него ничего не вышло. Сам я лично помню только пару раз просыпался, хотя по графику отметки идут через каждый 3 минуты. А итог на утро - как будто и не спал :(

Но само приложение классное. Там есть много фич. Не знаю насколько они все полезные, но поиграться можно. Есть фича как определение фаз сна и подстройка будильника. Но я толком и не понял как это работает.