[14581] 2019-09-13_玩转摩尔斯电码:自制摩尔斯电码音频解析器

文档创建者:s7ckTeam
浏览次数:7
最后更新:2025-01-18
2019-09-13_玩转摩尔斯电码:自制摩尔斯电码音频解析器 x u t i e j u n   F r e e B u f   2 0 1 9 - 0 9 - 1 3 0 x 0 0   M o r s e   c o d e S O S · · ·         · · · 0 x 0 1   1 . 2 . U S B 1 . 2 . U S B 0 x 0 2   s h o r t . w a v l o n g . w a v s h o r t . w a v 7 0 0 H Z 1 0 0 . l o n g . w a v 7 0 0 H Z 3 0 0 - = 1 t = 3 t = 1 t = 3 t = 7 t ( ) # ! / u s r / b i n / p y t h o n #   - * -   c o d i n g :   u t f - 8   - * -
" " " 1   f o r   - 0   f o r   . = 1 t = 3 t = 1 t = 3 t = 7 t " " " f r o m   _ _ f u t u r e _ _   i m p o r t   p r i n t _ f u n c t i o n i m p o r t   r e ,   t i m e ,   d a t e t i m e ,   o s ,   s y s i m p o r t   p y g a m e #   M o r s e   d i c t i o n n a i r y . f r o m   m o r s e _ d i c t   i m p o r t   * T   =   1 0 0   # # d e f   m y _ s l e e p ( s l e e p t i m e ) :         b e g i n   =   d a t e t i m e . d a t e t i m e . n o w ( )         w h i l e   T r u e :                 e n d   =   d a t e t i m e . d a t e t i m e . n o w ( )                 k   =   e n d   -   b e g i n                 i f   ( k . t o t a l _ s e c o n d s ( ) * 1 0 0 0 )   >   s l e e p t i m e :                         b r e a k d e f   g e t _ u s e r _ t e x t ( ) :         u s e r _ t e x t   =   r a w _ i n p u t ( " P l e a s e   e n t e r   t h e   m e s s a g e " )         u s e r _ t e x t   =   u s e r _ t e x t . l o w e r ( )         w o r d _ l i s t   =   l i s t ( u s e r _ t e x t )         r e t u r n   w o r d _ l i s t d e f   p l a y _ s o u n d ( p a t h ) :         p y g a m e . m i x e r . m u s i c . l o a d ( p a t h )         p y g a m e . m i x e r . m u s i c . p l a y ( )         w h i l e   1 :                 i f   n o t   p y g a m e . m i x e r . m u s i c . g e t _ b u s y ( ) :                         b r e a k d e f   l o n g _ p u l s e ( i s _ s l e e p ) :         p l a y _ s o u n d ( " . / a u d i o / l o n g . w a v " )         i f   i s _ s l e e p   = =   T r u e :                 m y _ s l e e p ( 1 0 0 ) d e f   s h o r t _ p u l s e ( i s _ s l e e p ) :         p l a y _ s o u n d ( " . / a u d i o / s h o r t . w a v " )         i f   i s _ s l e e p   = =   T r u e :                 m y _ s l e e p ( 1 0 0 ) d e f   g a p _ 1 t ( ) :         # t i m e . s l e e p ( 0 . 1 )         m y _ s l e e p ( 1 0 0 ) d e f   g a p _ 3 t ( ) :         p r i n t ( "       " , e n d = " " )   # s h o r t   g a p         # t i m e . s l e e p ( 0 . 3 )         m y _ s l e e p ( 3 0 0 ) d e f   g a p _ 7 t ( ) :         p r i n t ( "               " , e n d = " n " )   # l o n g   g a p         # t i m e . s l e e p ( 0 . 7 )         m y _ s l e e p ( 7 0 0 )
        m y _ s l e e p ( 7 0 0 ) d e f   p l a y _ m o r s e _ c o d e ( m o r s e _ c o d e ) :         l e n g t h   =   l e n ( m o r s e _ c o d e )         f o r   i   i n   r a n g e ( l e n ( m o r s e _ c o d e ) ) :                 i f   m o r s e _ c o d e [ i ]   = =   ' 1 ' :                         i f   i   ! =   l e n g t h - 1 :                                 l o n g _ p u l s e ( T r u e )                         e l s e :                                 l o n g _ p u l s e ( F a l s e )                 e l i f   m o r s e _ c o d e [ i ]   = =   ' 0 ' :                         i f   i   ! =   l e n g t h - 1 :                                 s h o r t _ p u l s e ( T r u e )                         e l s e :                                 s h o r t _ p u l s e ( F a l s e ) d e f   p l a y _ t e x t ( a l p h a _ t e x t ) :         p r i n t ( " n = = = = = = = = = = = = = = = = = = = n P l a y i n g n = = = = = = = = = = = = = = = = = = = n " )         a l p h a _ t e x t   =   a l p h a _ t e x t . l o w e r ( )         f o r   l e t t e r   i n   a l p h a _ t e x t :                 i f   l e t t e r   i n   m o r s e _ d i c t . k e y s ( ) :                         m o r s e _ c o d e   =   m o r s e _ d i c t [ l e t t e r ]                         p l a y _ m o r s e _ c o d e ( m o r s e _ c o d e )                         g a p _ 3 t ( )                 e l i f   l e t t e r   = =   "   " :                         g a p _ 7 t ( )                 e l s e :                         p r i n t ( " ? " , e n d = " " )                         s y s . s t d o u t . f l u s h ( )                         g a p _ 3 t ( )         p r i n t ( " n " ) d e f   t e s t 1 ( ) :         w h i l e   T r u e :                 p l a y _ s o u n d ( " . / a u d i o / l o n g . w a v " )                 m y _ s l e e p ( 1 0 0 )                 p l a y _ s o u n d ( " . / a u d i o / l o n g . w a v " )                 m y _ s l e e p ( 1 0 0 )                 p l a y _ s o u n d ( " . / a u d i o / l o n g . w a v " )                 m y _ s l e e p ( 1 0 0 )                 p l a y _ s o u n d ( " . / a u d i o / l o n g . w a v " )                 m y _ s l e e p ( 1 0 0 )                 p l a y _ s o u n d ( " . / a u d i o / l o n g . w a v " )                 m y _ s l e e p ( 3 0 0 0 )                 t e x t   =   " 1 1 1 1 1 "                 p l a y _ m o r s e _ c o d e ( t e x t )                 m y _ s l e e p ( 3 0 0 0 ) d e f   t e s t 2 ( ) :         w h i l e     T r u e :                 t e x t   =   " I   L O V E   Y O U "                 p l a y _ t e x t ( t e x t )                 m y _ s l e e p ( 3 0 0 0 ) i f   _ _ n a m e _ _   = =   ' _ _ m a i n _ _ ' :         p y g a m e . i n i t ( )         p y g a m e . d i s p l a y . s e t _ m o d e ( [ 3 0 0 , 3 0 0 ] )         p y g a m e . m i x e r . i n i t ( )         p y g a m e . t i m e . d e l a y ( 1 0 0 0 )       # 1 m i x e r         # t e s t 1 ( )         # t e s t 2 ( )
0 x 0 3   F F T 7 0 0 H Z 使 2 1 6 0 0 H Z 使 B l a c k m a n   W i n d o w F F T ? F F T   ( F a s t   F o u r i e r   T r a n s f o r m ,   )   F F T   ( s a m p l i n g _ r a t e )     f f t _ s i z e   F F T     f f t _ s i z e   F F T     f   F F T   F F T f f t _ s i z e / 2 f f t _ s i z e F F T f f t _ s i z e s a m p l i n g _ r a t e / f f t _ s i z e 1 f f t _ s i z e ( )         # t e s t 2 ( )         t e x t   =   g e t _ u s e r _ t e x t ( )         p l a y _ t e x t ( t e x t ) # ! / u s r / b i n / P y t h o n #   - * -   c o d i n g :   U T F - 8   - * - f r o m   _ _ f u t u r e _ _   i m p o r t   p r i n t _ f u n c t i o n f r o m   s y s   i m p o r t   b y t e o r d e r f r o m   a r r a y   i m p o r t   a r r a y f r o m   s t r u c t   i m p o r t   p a c k i m p o r t   p y a u d i o i m p o r t   w a v e i m p o r t   t i m e i m p o r t   s t r u c t i m p o r t   s y s i m p o r t   n u m p y   a s   n p i m p o r t   w i r i n g p i " " " R u l e s : = 1 T = 3 T = 1 T = 3 T = 7 T " " " " " " 1 . 3 T 2 . - " " " T   =   1 0 0       # T 3   =   3 * T     #
T H R E S H O L D   =   3 0 0     # C H U N K   =   1 6 0 F O R M A T   =   p y a u d i o . p a I n t 1 6 R A T E   =   1 6 0 0 0         # w i n d o w   =   n p . b l a c k m a n ( C H U N K )   #   b l a c k m a n F R E Q   =   7 0 0             # 7 0 0 H Z H z V A R I A N C E   =   4 0 S C A M P L E _ T I M E _ O N E _ T I M E   =   C H U N K * 1 0 0 0 / R A T E       #   1 0 C H A R _ I N T E R V A L   =   2 5 0         #   = 3 T l e t t e r _ t o _ m o r s e   =   {         " A "   :   " . - " ,           " B "   :   " - . . . " ,         " C "   :   " - . - . " ,         " D "   :   " - . . " ,         " E "   :   " . " ,               " F "   :   " . . - . " ,         " G "   :   " - - . " ,         " H "   :   " . . . . " ,         " I "   :   " . . " ,         " J "   :   " . - - - " ,       " K "   :   " - . - " ,           " L "   :   " . - . . " ,         " M "   :   " - - " ,           " N "   :   " - . " ,             " O "   :   " - - - " ,         " P "   :   " . - - . " ,       " Q "   :   " - - . - " ,         " R "   :   " . - . " ,         " S "   :   " . . . " ,         " T "   :   " - " ,               " U "   :   " . . - " ,         " V "   :   " . . . - " ,       " W "   :   " . - - " ,           " X "   :   " - . . - " ,         " Y "   :   " - . - - " ,       " Z "   :   " - - . . " ,         " 1 "   :   " . - - - - " ,         " 2 "   :   " . . - - - " ,     " 3 "   :   " . . . - - " ,       " 4 "   :   " . . . . - " ,         " 5 "   :   " . . . . . " ,     " 6 "   :   " - . . . . " ,       " 7 "   :   " - - . . . " ,         " 8 "   :   " - - - . . " ,     " 9 "   :   " - - - - . " ,       " 0 "   :   " - - - - - " ,         "   "   :   " / " } d e f   i s _ s i l e n t ( s o u n d _ d a t a ) :         " R e t u r n s   ' T r u e '   i f   b e l o w   t h e   ' s i l e n t '   t h r e s h o l d "         r e t u r n   m a x ( s o u n d _ d a t a )   <   T H R E S H O L D #   i m p o r t a n t #   d e f   e n c o d e ( r a w _ d a t a ) :         l i s t a s c i i   =   " "         m a x i m u m   =   0         i c o u n t   =   0         #           f o r   i   i n   r a n g e ( l e n ( r a w _ d a t a ) ) :                 i f   r a w _ d a t a [ i ]   = =   ' 1 ' :                         i c o u n t   + =   1                         m a x i m u m   =   m a x ( m a x i m u m , i c o u n t )                 e l i f   r a w _ d a t a [ i ]   = =   ' 0 ' :                         i c o u n t   =   0         i f   m a x i m u m   <   5 :                 p r i n t ( " n - - - - - - - - t h r o w   i t - - - - - - - - n " )                 r e t u r n         #           # p r i n t ( " n - - - - - - - r a w   d a t a - - - - - - - n " )         # p r i n t ( r a w _ d a t a ) ;         # p r i n t ( " n - - - - - - - r a w   d a t a - - - - - - - n " )         #   ( 1 / 2 ) ' 1 '         i   =   0         j   =   0         t e m p _ l i s t   =   l i s t ( r a w _ d a t a )         w h i l e   i   <   l e n ( t e m p _ l i s t ) :                 i f   t e m p _ l i s t [ i ]   = =   ' 0 ' :                         i   + =   1                         c o n t i n u e                 f o r   j   i n   r a n g e ( i , l e n ( t e m p _ l i s t ) ) :                         i f   t e m p _ l i s t [ j ]   ! =   t e m p _ l i s t [ i ] :
                        i f   t e m p _ l i s t [ j ]   ! =   t e m p _ l i s t [ i ] :                                 b r e a k                 #                 i f   j - i   < =   5 :                         f o r   k   i n   r a n g e ( i , j ) :                                 t e m p _ l i s t [ k ]   =   ' 0 '                 e l s e :                         i   =   j                 i   + =   1         r a w _ d a t a = ' ' . j o i n ( t e m p _ l i s t )         # p r i n t ( " n - - - - - - - c l e a n   j a m ( 1 / 2 ) - - - - - - - n " )         # p r i n t ( r a w _ d a t a ) ;         # p r i n t ( " n - - - - - - - c l e a n   j a m ( 1 / 2 ) - - - - - - - n " )         #   ( 1 / 2 ) ' 0 '         t e m p _ r a w _ d a t a   =   r a w _ d a t a [ 0 ]         l a s t _ n u m b e r   =   r a w _ d a t a [ 0 ]         f o r   i   i n   r a n g e ( 1 , l e n ( r a w _ d a t a ) ) :                 i f   r a w _ d a t a [ i ]   ! =   l a s t _ n u m b e r :                         t e m p _ r a w _ d a t a   + =   ' # '                         l a s t _ n u m b e r   =   r a w _ d a t a [ i ]                 t e m p _ r a w _ d a t a   + =   r a w _ d a t a [ i ]         # p r i n t ( t e m p _ r a w _ d a t a )         l i s t 1   =   t e m p _ r a w _ d a t a . s p l i t ( " # " )         # p r i n t ( " n - - - - - - - m o d i f i e d   d a t a - - - - - - - n " )         # p r i n t ( l i s t 1 )         # p r i n t ( " n - - - - - - - m o d i f i e d   d a t a - - - - - - - n " )         #           f o r   i   i n   r a n g e ( l e n ( l i s t 1 ) ) :                 l i n e   =   l i s t 1 [ i ]                 i f   l i n e [ 0 ]   = =   ' 1 ' :                         i f   l e n ( l i s t 1 [ i ] )   > =   2 0   a n d   l e n ( l i s t 1 [ i ] )   <   1 0 0 :         # 2 0 0 - 1 0 0 0   m s   d a h ,   t h r o w s   v a l u e s   >   1 0 0                                 l i s t a s c i i   + =   " - "                         e l i f   l e n ( l i s t 1 [ i ] )   <   2 0   a n d   l e n ( l i s t 1 [ i ] )   >   5 :           # 5 0 - 2 0 0 m s   i s   d i t                                 l i s t a s c i i   + =   " . "                 i f   l i n e [ 0 ]   = =   ' 0 ' :                         i f   l e n ( l i s t 1 [ i ] )   > =   2 0   a n d   l e n ( l i s t 1 [ i ] )   <   6 0 :         # 2 0 0 - 6 0 0   m s                                   l i s t a s c i i   + =   " # "         l i s t a s c i i   =   l i s t a s c i i . s p l i t ( " # " )         l i s t a s c i i   =   [ i   f o r   i   i n   l i s t a s c i i   i f ( l e n ( s t r ( i ) ) ! = 0 ) ]         # p r i n t ( " n - - - - - - - d i d a   d a t a - - - - - - - n " )         # p r i n t ( l i s t a s c i i )         # p r i n t ( " n - - - - - - - d i d a   d a t a - - - - - - - n " )         s t r i n g o u t = " "         f o r   i   i n   r a n g e ( l e n ( l i s t a s c i i ) ) :                 b F i n d   =   F a l s e                 f o r   l e t t e r , m o r s e   i n   l e t t e r _ t o _ m o r s e . i t e m s ( ) :                         i f   l i s t a s c i i [ i ]   = =   m o r s e :                                 s t r i n g o u t   + =   l e t t e r                                 b F i n d   =   T r u e                 i f   b F i n d   = =   F a l s e :                         s t r i n g o u t   + =   ' ? '
                i f   l i s t a s c i i [ i ]   = =   " " :                         s t r i n g o u t   + =   "   "         i f   s t r i n g o u t   ! =   "   " :                 p r i n t ( s t r i n g o u t , e n d = " " )                 s y s . s t d o u t . f l u s h ( ) d e f   r e c o r d ( ) :         n u m _ s i l e n t   =   0         s n d _ s t a r t e d   =   F a l s e         o n c o u n t   =   0         o f f c o u n t   =   0         s t a t u s   =   0         t i m e l i s t   =   " "         p   =   p y a u d i o . P y A u d i o ( )         s t r e a m   =   p . o p e n ( f o r m a t = F O R M A T ,                                         c h a n n e l s = 1 ,                                         r a t e = R A T E ,                                         i n p u t = T r u e ,                                         f r a m e s _ p e r _ b u f f e r = C H U N K )         p r i n t ( " # # # # # # # # # # # # # # S T A R T # # # # # # # # # # # # # # " )         w h i l e   T r u e :                 s o u n d _ d a t a   =   s t r e a m . r e a d ( C H U N K ,   e x c e p t i o n _ o n _ o v e r f l o w   =   F a l s e )                 i f   b y t e o r d e r   = =   ' b i g ' :                         s o u n d _ d a t a . b y t e s w a p ( )                 # r . e x t e n d ( s o u n d _ d a t a )                 s a m p l e _ w i d t h   =   p . g e t _ s a m p l e _ s i z e ( F O R M A T )                 # f i n d   f r e q u e n c y   o f   e a c h   c h u n k                 i n d a t a   =   n p . a r r a y ( w a v e . s t r u c t . u n p a c k ( " % d h " % ( C H U N K ) ,   s o u n d _ d a t a ) ) * w i n d o w                 # t a k e   f f t   a n d   s q u a r e   e a c h   v a l u e                 f f t D a t a   =   a b s ( n p . f f t . r f f t ( i n d a t a ) ) * * 2                 #   f i n d   t h e   m a x i m u m                 w h i c h   =   f f t D a t a [ 1 : ] . a r g m a x ( )   +   1                 s i l e n t   =   i s _ s i l e n t ( i n d a t a )                 #   s i g n a l   f r e q u e n c y                 i f   s i l e n t :                         t h e f r e q   =   0                 e l i f   w h i c h   ! =   l e n ( f f t D a t a ) - 1 :                         y 0 , y 1 , y 2   =   n p . l o g ( f f t D a t a [ w h i c h - 1 : w h i c h + 2 : ] )                         x 1   =   ( y 2   -   y 0 )   *   . 5   /   ( 2   *   y 1   -   y 2   -   y 0 )                         #   f i n d   t h e   f r e q u e n c y   a n d   o u t p u t   i t                         t h e f r e q   =   ( w h i c h + x 1 ) * R A T E / C H U N K                 e l s e :                         t h e f r e q   =   w h i c h * R A T E / C H U N K                 # p r i n t ( t h e f r e q )                 # c h e c k   f r e q u e n c y                 i f   t h e f r e q   >   ( F R E Q - H z V A R I A N C E )   a n d   t h e f r e q   <   ( F R E Q + H z V A R I A N C E ) :                         t i m e l i s t   + =   " 1 "                         n u m _ s i l e n t   =   0                         # p r i n t ( " 1 " )                 e l s e :                         t i m e l i s t   + =   " 0 "                         n u m _ s i l e n t   + =   1
0 x 0 5   仿 0 x 0 6   h t t p s : / / w e n k u . b a i d u . c o m / v i e w / f 1 8 4 e a a 0 0 9 1 2 a 2 1 6 1 5 7 9 2 9 7 b . h t m l     仿 * x u t i e j u n F r e e B u f                         n u m _ s i l e n t   + =   1                         # p r i n t ( " 0 " )                 i f   n u m _ s i l e n t * S C A M P L E _ T I M E _ O N E _ T I M E   >   C H A R _ I N T E R V A L   a n d   " 1 "   i n   t i m e l i s t :                         e n c o d e ( t i m e l i s t )                         t i m e l i s t   =   " "                 #   1 0                 i f   n u m _ s i l e n t * S C A M P L E _ T I M E _ O N E _ T I M E   >   1 0 * 1 0 0 0 :                         p r i n t ( " r e s e t " )                         n u m _ s i l e n t   = 0                         t i m e l i s t   =   " "         # p r i n t   ( t i m e l i s t )         p r i n t ( " # # # # # # # # # # # # # # E N D # # # # # # # # # # # # # # " )         # p r i n t ( n u m _ s i l e n t )         p . t e r m i n a t e ( ) i f   _ _ n a m e _ _   = =   ' _ _ m a i n _ _ ' :         #         # r o o t         w i r i n g p i . p i H i P r i ( 1 )         r e c o r d ( )

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则