none
How can I switch off the camera shutter sound-effect RRS feed

  • Frage

  • Hi,

    I develop my first Windows Phone app 8.1 (no silverlight).

    I try to make a picture with the camera - which works at the moment, but

    I need to switch off the shutter-soundeffect, when the camera takes the picture.

    Anyone an idea?

    Regards,

    Oliver

    Montag, 2. März 2015 15:29

Antworten

  • Hallo,

    ich habe mich bisher selbst nur ganz wenig mit der Camera-API auseinander gesetzt. Ich habe daher zum starten das Beispiel diesen MSDN-Artikels gewählt. Zunächst testete ich, ob die Einstellung unter Klingeltöne + Sounds eine Auswirkung auf das Verhalten hat - ja, der Beispielcode richtet sich an den Systemeinstellungen aus. Abfragen kann man diese Einstellung scheinbar mittels folgender Eigenschaft:

    var Sound = captureManager.MediaCaptureSettings.CameraSoundRequiredForRegion;

    Nach ein wenig testen und probieren glaube ich nicht das du den Sound einfach so für die eigene App ausschalten kannst. Denn selbst die MS eigenen Apps benutzen alle den Standardsound, wenn er aktiviert ist. Das muss wenn dann der Benutzer manuell in den Einstellungen tun bzw. eben die Lautstärke herunter regeln.

    Da du in deinem Code eine Variable Namens barcodeReader hast, vermute ich mal, dass du so etwas in der Art bauen willst. Die Bing-Scan-App macht es so, das man gar kein Foto macht, sondern einfach nur auf den Code scannt. Sobald dann in dem Previewstream ein Code entdeckt wurde, wird er über dem Previewstream in der UI angezeigt.

    Im allgemeinen habe ich so meine Fragen zur Zeit bei der WP 8.1 API. Meiner Ansicht nach ist die doch schon seeeehr Device abhängig.
    Viele Feature wie Focus-Control funktioniert auf dem einem Device und auf einem anderen wiederum nicht.

    Device-Abhängig wird es leider immer sein. Nicht jedes Gerät kann alles enthalten - und besonders bei der Kamera gibt es viele Detaileigenschaften die nur die besseren Modelle besitzen.
    Wenn man es aber mal mit der Desktopentwicklung vergleicht, so macht es einem die stark beschnittene App-API hier mal sehr einfach.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Montag, 2. März 2015 17:13

Alle Antworten

  • Hi Oliver,

    you asked your question in the German MSDN Forum. Therefore I answers in German.

    Wie sieht denn dein aktueller Code aus? Das heißt, welche Klassen verwendest du?

    Meines Wissens nach kann man das Geräusch nur deaktivieren, indem man die Systemlautstärke ganz runter regelt bzw. vlt. gibt es eine Systemeinstellung dafür. Das muss der Benutzer dann aber manuell einstellen - da haben Apps keinen Zugriff.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 2. März 2015 15:44
  • Hallo Tom,

    Danke für Deine Hilfe und wenn ich in deutsch schreiben kann gleich nochmal Danke:-)

    Also ich meine Photo-Cam initialisierung ist zur Zeit noch ein gebastel, aber es läuft zumindest schon mal so.

                this.mediaCapture = new MediaCapture();            
    
                var cameraId = await this.GetCameraId();            
    
                await this.mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings
                {
                    StreamingCaptureMode = StreamingCaptureMode.Video,
                    PhotoCaptureSource = PhotoCaptureSource.VideoPreview,
                    AudioDeviceId = string.Empty,
                    VideoDeviceId = cameraId.Id
                });
                
                await this.mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, this.GetMaxResolution());                      
    
                this.mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);
    
                lowestResolution = this.GetLowestResolution();
    
                this.captureElement.Source = this.mediaCapture;
                
                await this.mediaCapture.StartPreviewAsync();

    Der Preview der PhotoCam wird anhand des obrigen Codes in einem CaptureElement gestartet.

    Ein Foto schiesse ich mit folgendem Code:

                var format = ImageEncodingProperties.CreateJpeg();
                format.Height = lowestResolution.Height;
                format.Width = lowestResolution.Width;
    
                //rotate and save the image
                using (var imageStream = new InMemoryRandomAccessStream())
                {
                    //generate stream from MediaCapture
                    await this.mediaCapture.CapturePhotoToStreamAsync(format, imageStream);
    
                    //create decoder and encoder
                    var dec = await BitmapDecoder.CreateAsync(imageStream);
                    var enc = await BitmapEncoder.CreateForTranscodingAsync(imageStream, dec);
    
                    //roate the image
                    enc.BitmapTransform.Rotation = BitmapRotation.Clockwise90Degrees;
    
                    //write changes to the image stream
                    await enc.FlushAsync();
    
                    Debug.WriteLine("dec.PixelWidth=" + dec.PixelWidth);
                    Debug.WriteLine("dec.PixelHeight=" + dec.PixelHeight);
                    bmpCode = new WriteableBitmap((int)dec.PixelWidth, (int)dec.PixelHeight);
                    await bmpCode.SetSourceAsync(imageStream);
    
                    var result = this.barcodeReader.Decode(bmpCode);
                    if (result != null)
                    {
                        Debug.WriteLine("Code decoded! " + result.Text);
                    }
                }  

    Wenn das Photo aber nun geschossen wird, dann gibt es so einen Soundeffect den ich weghaben will.
    Ich teste zur Zeit mit 3 verschiedenen Windows Phone Devices.
    1 ist ok, die anderen beiden haben diesen Shutter-Soundeffect.

    Bin froh um jeden Tip.
    An die Möglichkeit den Sound vom device auf 0 zu stellen hatte ich auch schon.
    Das habe mich mal mit der Methode 'ClearEffectsAsync' versucht, was aber nicht
    bewirkt hat.

    Im allgemeinen habe ich so meine Fragen zur Zeit bei der WP 8.1 API.
    Meiner Ansicht nach ist die doch schon seeeehr Device abhängig.

    Viele Feature wie Focus-Control funktioniert auf dem einem Device und auf einem anderen wiederum nicht.

    Es sei vermerkt, dass dies mein erster Versuch in einer WP-App ist :-))

    Vielen Dank für jeden Tip im voraus schon einmal.

    Gruss aus Zürich,
    Oliver

    Montag, 2. März 2015 16:13
  • Hallo,

    ich habe mich bisher selbst nur ganz wenig mit der Camera-API auseinander gesetzt. Ich habe daher zum starten das Beispiel diesen MSDN-Artikels gewählt. Zunächst testete ich, ob die Einstellung unter Klingeltöne + Sounds eine Auswirkung auf das Verhalten hat - ja, der Beispielcode richtet sich an den Systemeinstellungen aus. Abfragen kann man diese Einstellung scheinbar mittels folgender Eigenschaft:

    var Sound = captureManager.MediaCaptureSettings.CameraSoundRequiredForRegion;

    Nach ein wenig testen und probieren glaube ich nicht das du den Sound einfach so für die eigene App ausschalten kannst. Denn selbst die MS eigenen Apps benutzen alle den Standardsound, wenn er aktiviert ist. Das muss wenn dann der Benutzer manuell in den Einstellungen tun bzw. eben die Lautstärke herunter regeln.

    Da du in deinem Code eine Variable Namens barcodeReader hast, vermute ich mal, dass du so etwas in der Art bauen willst. Die Bing-Scan-App macht es so, das man gar kein Foto macht, sondern einfach nur auf den Code scannt. Sobald dann in dem Previewstream ein Code entdeckt wurde, wird er über dem Previewstream in der UI angezeigt.

    Im allgemeinen habe ich so meine Fragen zur Zeit bei der WP 8.1 API. Meiner Ansicht nach ist die doch schon seeeehr Device abhängig.
    Viele Feature wie Focus-Control funktioniert auf dem einem Device und auf einem anderen wiederum nicht.

    Device-Abhängig wird es leider immer sein. Nicht jedes Gerät kann alles enthalten - und besonders bei der Kamera gibt es viele Detaileigenschaften die nur die besseren Modelle besitzen.
    Wenn man es aber mal mit der Desktopentwicklung vergleicht, so macht es einem die stark beschnittene App-API hier mal sehr einfach.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets


    Montag, 2. März 2015 17:13
  • Hi Tom,

    Erstmal herzlichen Dank, dass Du Dir die Zeit genommen hast, mir zu antworten und zu helfen.

    Das Property CameraSoundRequiredForRegion hatte ich auch schon entdeckt und war beinahe schon euphorisch :-)
    Bis sich herausstellte, dass das Property nur ein Get und kein Set besitzt.

    Ja Du hast recht, ich versuche zur Zeit einen QR-Code zu lesen.
    Und zur Zeit ist mir nichts besseres eingefallen, als das scannen zu simulieren, in dem ich solange intervall-mässig
    Pictures mache, bis in einem Picture der QR-Code entdeckt wurde.

    Aber dein Tip mit dieser Bing-Scan-App, die anscheinend gar kein Foto macht und den Code direkt im Stream sucht,
    hört sich ja echt deluxe an.

    Kannst Du mir da wohl ein paar Ressourcen nennen, wo ich mir das näher anschauen könnte wie das funktioniert?
    Bzw gibt es eine Sample-Snippet dafür irgendwo?

    Das wäre sensationell! :-)

    Betreffend Sound ist es halt wohl so wie du bereits sagtest, dass nur der User selber direkt an seinem Phone die
    Sounds kontrollieren kann. Das dachte ich mir bereits schon, weil ich das schon mehrmals in anderen Threads lesen konnte.

    Vielen Dank nochmals und ich hoffe du hast mir evtl. noch einen Tip, wo ich das mit
    dem direkten Streaming des QR-Codes näher untersuchen kann.

    Gruss,
    Oliver

    Montag, 2. März 2015 20:37
  • Hallo,
    wirklich viel weiter helfen kann ich dir leider auch nicht mehr. An Hand der Dokumentation würde ich sagen, dass es alles über die MediaCapture-Klasse läuft. So kannst du scheinbar den Stream der Kamera über die StartRecordToStreamAsync-Methode abgreifen.

    Mit der Analyse von Bilddaten habe ich mich bisher noch nie beschäftigt. Das Internet hat sicher einige Beispiele dazu - vieles wird aber für andere Plattformen (also keine Apps) abzielen. Das müsste man dann entsprechend auf das gegebene umbauen.

    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 2. März 2015 21:03