דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. עצירת תהליך שמופעל באירוע לחיצה

עצירת תהליך שמופעל באירוע לחיצה

מתוזמן נעוץ נעול הועבר תכנות
15 פוסטים 4 כותבים 311 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • אבייא מנותק
    אבייא מנותק
    אביי
    השיב לdovid ב נערך לאחרונה על ידי
    #6

    @dovid כתב בעצירת תהליך שמופעל באירוע לחיצה:

    כי בדקתי אצלי וקיבלתי שגיאה אחרת לחלוטין, של מופע ריק.

    System.IO.IOException: אין אפשרות לתהליך לגשת לקובץ 'C:\Users\abaye\source\repos\AA\AA\bin\Debug\text_test.wav' כיוון שתהליך אחר משתמש בקובץ.
       ב-  System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       ב-  System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
       ב-  System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
       ב-  tts_by_Google.Form1.TextToSpeech(String text) ב- C:\Users\abaye\source\repos\`AA\`AA\Form1.vb:שורה 131
       ב-  tts_by_Google.Form1.Button1_Click(Object sender, EventArgs e) ב- C:\Users\abaye\source\repos\AA\`AA\Form1.vb:שורה 177
       ב-  System.Windows.Forms.Control.OnClick(EventArgs e)
       ב-  System.Windows.Forms.Button.OnClick(EventArgs e)
       ב-  System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       ב-  System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       ב-  System.Windows.Forms.Control.WndProc(Message& m)
       ב-  System.Windows.Forms.ButtonBase.WndProc(Message& m)
       ב-  System.Windows.Forms.Button.WndProc(Message& m)
       ב-  System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       ב-  System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       ב-  System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    

    ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
    הלינקיה שלי https://abaye.co/link.html

    תגובה 1 תגובה אחרונה
    1
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #7

      @אביי כלומר, ההבדל בינינו זה הקוד שמשנה את הקובץ שאותו לא סיפקת.
      תוכל להביא אותו או להסביר איך אתה משנה את הקובץ?

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      אבייא תגובה 1 תגובה אחרונה
      1
      • אבייא מנותק
        אבייא מנותק
        אביי
        השיב לdovid ב נערך לאחרונה על ידי
        #8

        @dovid

                Dim request As HttpWebRequest = DirectCast(WebRequest.Create($"https://aaa"), HttpWebRequest)
                request.Method = "POST"
                request.ContentType = "application/json"
                Using streamWriter As StreamWriter = New StreamWriter(request.GetRequestStream())
                    Dim jsonPayload As String = JsonSerializer.Serialize(payload)
                    streamWriter.Write(jsonPayload)
                    streamWriter.Flush()
                End Using
                Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
                Using streamReader As StreamReader = New StreamReader(response.GetResponseStream())
                    Dim jsonResponse As String = streamReader.ReadToEnd()
                    Dim json_data As JsonElement = JsonSerializer.Deserialize(Of JsonElement)(jsonResponse)
                    Dim audio_content As String = json_data.GetProperty("audioContent").ToString()
                    If Not String.IsNullOrEmpty(audio_content) Then
                        Dim file_name As String = "test"
                        Dim audio_file_path As String = Path.Combine(t_dir, $"{file_name}.wav")
                        Dim audio_blob As Byte() = Convert.FromBase64String(audio_content)
                        Using audio_file As FileStream = New FileStream(audio_file_path, FileMode.Create, FileAccess.Write)
                            audio_file.Write(audio_blob, 0, audio_blob.Length)
                        End Using
                        PlayAudioFile(audio_file_path)
        

        ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
        הלינקיה שלי https://abaye.co/link.html

        תגובה 1 תגובה אחרונה
        0
        • קומפיונטק מנותק
          קומפיונטק מנותק
          קומפיונט
          כתב ב נערך לאחרונה על ידי
          #9

          @אביי אם הבעיה ש-NAudio נועל את הקובץ גם אחרי ההשמעה (לא יודע למה) אז זמנית יש לי ב' פתרונות חלופיים:

          א. לכתוב כל פעם לקובץ חדש (לא לדרוס את הישן) ובסיום התוכנית למחוק הכל.
          ב. אם אתה צריך להשמיע קובץ שיורד מהרשת אז לא חייב לשמור לקובץ, אפשר להשמיע ישירות עם RawSourceWaveStream.

          תגובה 1 תגובה אחרונה
          2
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי dovid
            #10

            נו @אביי, אתה מנסה לכתוב על הקובץ הרבה לפני שאתה עוצר את ההשמעה!
            היית צריך לשים לפני ההורדה בדיקה אם הplayer בפעולה ואז לעצור (וזה אולי פחות נחמד כי אז בזמן ההורדה יש שקט...).
            הפתרונות הם מה שקומפיונט אמר. גם אתה חייב לשמור את הקובץ אתה לא חייב להשמיע עם AudioFileReader, אתה יכול מייד לקרוא את תוכן הקובץ ולהשמיע עם RawSourceWaveStream.
            אכתוב לך את הדרך הב' שהציע קומפיונט, אני שכתבתי את כל ההורדה מהאינטרנט כי היא כתובה מאוד מסורבל (משהו בסגנון של chatGPT).

            Async Function DownloadFromUrl(url As String, payload As Object) As Task(Of String)
                Using wc As New HttpClient()
                    Dim content = New StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")
                    Dim taskRes = Await wc.PostAsync(url, content)
                    Return Await taskRes.Content.ReadAsStringAsync()
                End Using
            End Function
            
            Function GetBytesWavFromJson(strJson As String) As Byte()
                Dim jsonData = JsonSerializer.Deserialize(Of JsonElement)(strJson)
                Dim audioContent = jsonData.GetProperty("audioContent").ToString()
                If String.IsNullOrEmpty(audioContent) Then
                    Return Convert.FromBase64String(audioContent)
                Else Return Nothing
                End If
            End Function
            
            Async Function DownloadAndPlay() As Task
                Dim text = Await DownloadFromUrl("", payload)
                Dim audio = GetBytesWavFromJson(text)
            
            
                player?.Dispose()
                player = New WaveOutEvent()
                player.Init(New RawSourceWaveStream(audio, 0, audio.Length, New WaveFormat()))
                player.Play()
                'playnig = True מיותר לכאורה
            End Function
            

            יש בקוד הזה סגנון מודרני של async await, אם זה חדש לך מידי הנה אותו קוד בגירסה אחרת:

            Function DownloadFromUrl(url As String, payload As Object) As String
                Using wc As New WebClient()
                    Dim content = New StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json")
                    wc.Headers(HttpRequestHeader.ContentType) = "application/json"
                    Return wc.UploadString(url, JsonSerializer.Serialize(payload))
                End Using
            End Function
            
            Function GetBytesWavFromJson(strJson As String) As Byte()
                Dim jsonData = JsonSerializer.Deserialize(Of JsonElement)(strJson)
                Dim audioContent = jsonData.GetProperty("audioContent").ToString()
                If String.IsNullOrEmpty(audioContent) Then
                    Return Convert.FromBase64String(audioContent)
                Else Return Nothing
                End If
            End Function
            
            Sub DownloadAndPlay()
                Dim text = DownloadFromUrl("", payload)
                Dim audio = GetBytesWavFromJson(text)
            
            
                player?.Dispose()
                player = New WaveOutEvent()
                player.Init(New RawSourceWaveStream(audio, 0, audio.Length, New WaveFormat()))
                player.Play()
                'playnig = True מיותר לכאורה
            End Sub
            

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            אבייא תגובה 1 תגובה אחרונה
            2
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              כתב ב נערך לאחרונה על ידי
              #11

              ו@אביי כיון שאני יודע שאתה עם רקע של קוד JS בגוגל סקריפט,
              אני מאוד ממליץ לך להגר לC#, זה בהתחלה נראה קשוח ומרובע יותר, אבל זה מנסיוני שווה.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              3
              • אבייא מנותק
                אבייא מנותק
                אביי
                השיב לdovid ב נערך לאחרונה על ידי
                #12

                @dovid שיניתי את השיטה לRawSourceWaveStream וזה פתר את הבעיה, אבל לא הבנתי למה טענת

                נו @אביי, אתה מנסה לכתוב על הקובץ הרבה לפני שאתה עוצר את ההשמעה!

                אני עשיתי סטופ לפני הקריאה לפונקציה בכלל. ToA זה הפונקציה שמורידה את השמע ובסיום קוראת לפונקציה PlayAudioFile.

                        If playnig = True Then
                            player.Stop()
                        End If
                 
                        ToA(r)
                

                .

                ו@אביי כיון שאני יודע שאתה עם רקע של קוד JS בגוגל סקריפט
                אני מאוד ממליץ לך להגר לC#, זה בהתחלה נראה קשוח ומרובע יותר, אבל זה מנסיוני שווה.

                אני אכן שם, רק בפרויקט הזה יש אילוצים שלא תלויים בי שמחייבים אותי לvb (נראה לי שכבר כתבתי בעבר כמה אני שונא אותה..) אגב, לgs עברתי אחרי זה, בגלל שהוא מאפשר להריץ באופן קבוע ועצמאי עם אמינות גבוהה ללא צורך להחזיק שרת (ויש גם את העניין של המשחק בתוך האקו-סיסטם של גוגל ללא מפתחות וכו')..

                ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
                הלינקיה שלי https://abaye.co/link.html

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #13

                  @אביי אוקי, אז אם במקום השורה stop תעשה dispose אז נראה לי שלא הייתה בעיה מלכתחילה, אבל הקוד שהבאתי לך יעזור לך בלאו הכי.
                  בכל מקרה הטיפול באירוע העצירה מיותר כל עוד אתה בכל מקרה מנקה בעת הורדה חדשה.

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  אבייא תגובה 1 תגובה אחרונה
                  1
                  • אבייא מנותק
                    אבייא מנותק
                    אביי
                    השיב לdovid ב נערך לאחרונה על ידי
                    #14

                    @dovid זה בדיוק היה הענין, שגם dispose לא עזר (זה בעצם מה שעשה Player_PlaybackStopped)

                    ניתן ליצור עימי קשר 8140hp+t@gmail.com | קטלוג מוצרים
                    הלינקיה שלי https://abaye.co/link.html

                    תגובה 1 תגובה אחרונה
                    0
                    • dovidD מנותק
                      dovidD מנותק
                      dovid ניהול
                      כתב ב נערך לאחרונה על ידי dovid
                      #15

                      @אביי כתבתי לך כבר שהPlayer_PlaybackStopped לא קורה מיידית בקריאה לstop אלא רק כשנגמר הקוד להריץ, כי זה טבעו של אירוע.
                      ממילא אם לפני הכתיבה על הקובץ עצרת את האודיו אך לא קראת מפורשות לdispose, הקוד של Player_PlaybackStopped לא יעזור כי הוא יקרה אחרי שתנסה לכתוב על הקובץ.

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                      תגובה 1 תגובה אחרונה
                      1

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום