Advertisement
Guest User

Untitled

a guest
Jan 31st, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.40 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. import win32ui
  3. import dde
  4. import time
  5. import recorder
  6.  
  7.  
  8. # Автоматическое включение и выключение записи звука для орбитрона.
  9. # Проверена работа с python 2.7 и pywin32-214. С другими версиями может не работать.
  10. # Для использования создать экзешник с помощью pyinstaller.
  11. # recorder брать отсюда: https://gist.github.com/sloria/5693955
  12. # В конфиге орбитрона добавить:
  13. # [Drivers]
  14. # WavDDE=путь\к\программе\dde_client.exe
  15. # После чего на вкладке "Rotor/Radio" орбитрона выбрать драйвер WavDDE,
  16. # выбрать интересующий спутник и нажать "Run" (кнопка справа от выпадающего списка).
  17.  
  18. def get_tracking_data(response):
  19.     if len(response.split()) != 5:
  20.         return False, None
  21.     result = {}
  22.     result_status = False
  23.     for record in response.split():
  24.         if len(record) < 2:
  25.             return status, {}
  26.         field = record[0:2]
  27.         val = record[2:]
  28.         if field == "SN":
  29.             result.update({field: val})
  30.         else:
  31.             result.update({field: float(val)})
  32.         result_status = ("SN" in result) and ("AZ" in result) and ("EL" in result) and ("DN" in result) and (
  33.             "UP" in result)
  34.     return result_status, result
  35.  
  36.  
  37. s = dde.CreateServer()
  38. s.Create("WavDDE")
  39. c = dde.CreateConversation(s)
  40. c.ConnectTo("Orbitron", "Tracking")
  41. connect_status = c.Connected()
  42. elevation_perv = False
  43. rec = recorder.Recorder(channels=2, rate=44100)
  44.  
  45. while True:
  46.     data_response = c.Request("TrackingData")
  47.     if data_response.isspace():
  48.         break
  49.     else:
  50.         status, data = get_tracking_data(data_response)
  51.         if not status:
  52.             break
  53.         else:
  54.             if (not elevation_perv) and (data["EL"] > 0):
  55.                 filename = time.strftime("%d_%m_%Y--%H_%M_%S.wav")
  56.                 recfile = rec.open(filename, "wb")
  57.                 recfile.start_recording()
  58.                 print("start record", filename)
  59.             if elevation_perv and data["EL"] <= 0:
  60.                 print("stop record")
  61.                 recfile.stop_recording()
  62.             elevation_perv = data["EL"] > 0
  63.     time.sleep(0.5)
  64.  
  65. s.Shutdown()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement